在web应用开发当中,表单还是很重要的元素。

应用表单组件有:文本框(input、textarea)、单选按钮和复选框、Select组件。

文本框:文本框的状态改变即文本框中的内容的改变。此时的state应该是inputValue或者是textareaValue。在状态改变时的处理函数应该是

  1. handleInputChange(e){
  2. this.setState({
  3. inputValue:e.target.value
  4. });
  5. }

单选按钮和复选框:

1.单选按钮:它的状态state就是radioValue

  1. this.state = {
  2. radioValue:''
  3. };
  4. //在这里只是设置了radioValue的值,因为单选按钮本来就是只有一个按钮被选中
  5. //当用户点击单选按钮的时候,就会通过下面的函数获取到选中的按钮的value
  6. //即radioValue
  7. handleChange(e){
  8. this.setState({
  9. radioValue:e.target.value,
  10. })
  11. }
  12. //下面通过===一次判断每个input标签的值和radioValue是否相等来判断checked的值是true还是false
  13. <input
  14. type="radio"
  15. value="male"
  16. checked={radioValue === 'male'}
  17. onChange = {this.handleChange}
  18. />
  19. <input
  20. type="radio"
  21. value="female"
  22. checked={radioValue === 'female'}
  23. onChange={this.handleChange}
  24. />

2.复选框:它的状态是通过一个数组来保存的,因为复选,即就应该保存选中的多个复选框,以便用户进行操作,从而改变状态而重新渲染。

  1. this.state = {
  2. coffee:[],
  3. }
  4. //通过一个数组来保存状态
  5. handleChange(e){
  6. const {checked,value} = e.target;
  7. let {coffee} = this.state;
  8. //判断这个复选框是否被选中
  9. if(checked && coffee.indexOf(value) === -1){
  10. coffee.push(value);
  11. }else{
  12. coffee = coffee.filter(i => i !== value);
  13. }
  14. this.setState({
  15. coffee,
  16. });
  17. }

然后通过coffee.indexOf('aa') 去遍历coffee这个数组,是否能找到和aa相同的字符串,来进行复选框checked是true还是false的判断。

  1. <p>请你选择你最喜欢的咖啡</p>
  2. <label>
  3. <input
  4. type="checkbox"
  5. value="aa"
  6. checked={coffee.indexOf('aa') !== -1}
  7. onChange={this.handleChange}
  8. />
  9. aa
  10. </label>
  11. <br/>
  12. <label>
  13. <input
  14. type="checkbox"
  15. value="bb"
  16. checked={coffee.indexOf('bb') !== -1}
  17. onChange={this.handleChange}
  18. />
  19. </label>

Select组件:如果是单选,就用单个变量保存,如果是多选就用一个数组保存。

1.单选:

  1. this.state = {
  2. area:'',
  3. }
  4. handleChange(e){
  5. this.setState({
  6. area:e.target.value,
  7. });
  8. }
  9. render(){
  10. const {area} = this.state;
  11. return(
  12. <select value={area} onChange={this.handleChange}>
  13. <option value="beijing">北京</option>
  14. <option value="shanghai">上海</option>
  15. <option value="hangzhou">杭州</option>
  16. </select>
  17. )
  18. }

2.多选

  1. this.state = {
  2. area:['beijing','shanghai'],
  3. };
  4. handleChange(e){
  5. const {options} = e.target;
  6. //注意,这里返回的options是一个对象,并非数组
  7. const area = Object.keys(options).
  8. filter(i => options[i].selected === true)
  9. .map(i => options[i].value);
  10. this.setState({
  11. area,
  12. });
  13. }
  14. render(){
  15. const {area} = this.state;
  16. return(
  17. <select multiple={true} value={area} onChange={this.handleChange}>
  18. <option value="beijing">北京</option>
  19. <option value="shanghai">上海</option>
  20. <option value="hangzhou">杭州</option>
  21. </select>
  22. );
  23. }

React中的表单元素的更多相关文章

  1. React中的表单应用

    React中的表单应用 用户在表单填入的内容,属于用户跟组件的互动,所以不能用this.props读取. var Input = React.createClass({ //初始化组件数据 getIn ...

  2. react实战系列 —— React 中的表单和路由的原理

    其他章节请看: react实战 系列 React 中的表单和路由的原理 React 中的表单是否简单好用,受控组件和非受控是指什么? React 中的路由原理是什么,如何更好的理解 React 应用的 ...

  3. 详解HTML中的表单元素

    代码详讲: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...

  4. js动态的往表格中加入表单元素

    效果如图: 这里我用的是layui的静态表格,其他框架也是一样的(只要你都表单元素要通过js进行渲染),我的需求是在表单中放了表格的元素,表格中还有表单的元素.表格中的行数据是js动态添加的,正常的添 ...

  5. React中redux表单编辑

    reduxForm中反写数据在输入框中,数据是从别的模块拉取 // 编辑应用表单 class EditCode extends React.Component { constructor(props) ...

  6. 关于struts中的表单元素- Form bean not specified on mapping for action: "helloa.do"报错

    今天测试struts时仿照书上写了一个小的表单提交代码 <html:form action="helloa.do" method="post"> & ...

  7. JQuery中根据表单元素动态拼接json 字符串

    // <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...

  8. angular 表单元素的使用总结

    工作中form表单元素最常用的是input,问题没有太多,现在总结下select ,radio组,checkbox的使用 1 select 常用的使用方式,如下 var Cityis = [{id:0 ...

  9. 表单元素(控件)不可见,你用visibility还是display?(转)

    属性大比拼:visibility和display的介绍 今天在做一个表单时涉及到这方面,当选中相应的选项后设置相应的几个元素(控件可见或不可见),后来还是用了visibility来实现.我们先来看下v ...

随机推荐

  1. H264协议(转)

    码率(Bitrate).帧率(FPS).分辨率和清晰度的联系与区别:https://blog.csdn.net/pc9319/article/details/79621352 H.264编码原理以及I ...

  2. mysql之基本数据库操作(二)

    环境信息 数据库:mysql-5.7.20 操作系统:Ubuntu-16.04.3 mysql的启动.退出.重启 # 启动 $ sudo service mysqld start # 停止 $ sud ...

  3. peewee外键性能问题

    # 转载自:https://www.cnblogs.com/miaojiyao/articles/5217757.html 下面讨论一下用peewee的些许提高性能的方法. 避免N+1查询 N+1查询 ...

  4. Makefile parameters pass 參數傳遞

    command $make ARCH=7777777777777777777777777777777 Makefile content $(warning $(ARCH)) output Makefi ...

  5. selenium===requestium模块介绍

    有时,你可能会在网上实现一些自动化操作.比如抓取网站,进行应用测试,或在网上填表,但又不想使用API,这时自动化就变得很必要.Python提供了非常优秀的Requests库可以辅助进行这些操作.可惜, ...

  6. shell 智能获取历史记录功能

    vim ~/.inputrc 文件内容: "\e[A": history-search-backward"\e[B": history-search-forwa ...

  7. 图论-最近公共祖先-离线Tarjan算法

    有关概念: 最近公共祖先(LCA,Lowest Common Ancestors):对于有根树T的两个结点u.v,最近公共祖先表示u和v的深度最大的共同祖先. Tarjan是求LCA的离线算法(先存储 ...

  8. 数据类型转换(计算mac地址)

    [root@localhost test1]# vim 19.py //add #!/usr/bin/python macaddr = '00:0C:29:D1:6F:E9' prefix_mac = ...

  9. 简单理解Hash算法的作用

    什么是Hash Hash算法,简称散列算法,也成哈希算法(英译),是将一个大文件映射成一个小串字符.与指纹一样,就是以较短的信息来保证文件的唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到 ...

  10. LoadRunner脚本回放日志中的Warning信息

    关注LoadRunner脚本回放日志中的Warning信息   最近在与大家的讨论中发现了LoadRunner的很多问题,出于解决问题的出发点,我也就相关自己不理解的问题在Google中搜索了一番,并 ...