• React 从入门到进阶之路(六)


    之前的文章我们介绍了 React 表单事件 键盘事件 事件对象以及 React中 的 ref 获取 dom 节点 、双向数据绑定。接下来我们将介绍 React 表单详解 约束性和非约束性组件 input text checkbox radio  select  textarea  以及获取表单的内容。

      1 import React, {Component} from 'react';
      2 
      3 class Home extends Component {
      4     constructor(props) {
      5         super(props);
      6         this.state = {
      7             name: "",
      8             sex: "1",
      9             city: "",
     10             cities: ["北京", "上海", "南京"],
     11             hobbies: [{
     12                 title: "抽烟", checked: true
     13             }, {
     14                 title: "喝酒", checked: false
     15             }, {
     16                 title: "烫头", checked: false
     17             }],
     18             info: "",
     19         }
     20 
     21     }
     22 
     23     // 获取所有数据
     24     getAllData = (event) => {
     25         event.preventDefault();
     26         console.log(this.state)
     27     }
     28 
     29     // 名字
     30     changeName = (event) => {
     31         this.setState({
     32             name: event.target.value
     33         })
     34     }
     35 
     36     // 性别
     37     changeSex = (event) => {
     38         this.setState({
     39             sex: event.target.value
     40         })
     41     }
     42 
     43     // 地址
     44     changeCity = (event) => {
     45         this.setState({
     46             city: event.target.value
     47         })
     48     }
     49 
     50     // 爱好
     51     changeHobbies = (key) => {
     52         let hobbies = this.state.hobbies;
     53         hobbies[key].checked = !hobbies[key].checked;
     54         this.setState({
     55             hobbies: hobbies
     56         })
     57     }
     58 
     59     // 简介
     60     changeInfo = (event) => {
     61         this.setState({
     62             info: event.target.value
     63         })
     64     }
     65 
     66     render() {
     67         return (
     68             <div>
     69                 <p>Hello {this.state.name}</p>
     70                 <form action="" onSubmit={this.getAllData}>
     71 
     72                     用户名:
     73                     <input value={this.state.name} onChange={this.changeName} type="text"/>
     74 
     75                     <br/><br/>
     76 
     77                     性别:
     78                     男<input value="1" checked={this.state.sex === "1"} onChange={this.changeSex} type="radio"/>
     79                     女<input value="2" checked={this.state.sex === "2"} onChange={this.changeSex} type="radio"/>
     80 
     81                     <br/><br/>
     82 
     83                     地址:
     84                     <select value={this.state.city} onChange={this.changeCity}>
     85                         {this.state.cities.map((val, key) => {
     86                             return <option key={key}>{val}</option>
     87                         })}
     88                     </select>
     89 
     90                     <br/><br/>
     91 
     92                     爱好:
     93                     {this.state.hobbies.map((val, key) => {
     94                         return (
     95                             <span key={key}>
     96                                 {val.title}
     97                                 <input checked={val.checked} onChange={this.changeHobbies.bind(this, key)} type="checkbox"/>
     98                             </span>
     99                         )
    100                     })}
    101 
    102                     <br/><br/>
    103 
    104                     简介:
    105                     <textarea value={this.info} onChange={this.changeInfo}></textarea>
    106                     <br/><br/>
    107 
    108                     <input value="提交" type="submit"/>
    109                 </form>
    110 
    111             </div>
    112         );
    113     }
    114 }
    115 
    116 export default Home;

    之前我们已经介绍过了表单在 React 的一些基本信息,上面的代码比较详细的介绍了一下不同表单获取信息的方式。

    下面是不同表单的不同处理方式:

    1、text:

    用 value 绑定 this.state 中的数据,然后通过 onChange 事件获取 changeName 方法,在 event 事件中获取 input 的值并赋值给 this.state

    2、radio:

    性别只能选择一个,所以 this.state.sex 默认值为 1 ,表示男,value 值分别绑定为 1 和 2,通过 checked 属性来判断哪个被选中,通过 onChange 事件将默认的 value 值赋值给 this.state.sex,checked 属性就能来判断被选中的值了。

    3、select:

    select 跟正常的 HTML 有所不同,它的 value 值绑定在 select 上,然后通过 onChange 事件获取选中的值,并将该值赋值给另一个变量来存储所选的值。

    4、checkbox:

    checkbox 为一个数组,可以选择多个值,在 this.state 的每个值中再添加一个属性 checked,选中为 true,没选中为 false,当点击某一个时,将所选中的值通过 onChange 事件传给 changeHobbies,然后通过该值找到 this.state 列表中的位置,将 checked 属性值去反即可来控制选中和取消选中。

    5、textarea:

    textarea 和 text 的获取值方法是一样的,通过 value 绑定 this.state 中的值,通过 onChange 事件来获取 textarea 框内的值并赋给 this.state。

    这样就实现了 form 表单中的值的双向数据绑定,可以通过在 form 上添加 onSubmit 事件,取消默认触发事件来获取 form 表单内的值。

    最后运行结果为:

  • 相关阅读:
    VMworld 2015 感受:VMware “Ready For Any”
    理解 OpenStack 高可用(HA)(1):OpenStack 高可用和灾备方案 [OpenStack HA and DR]
    Nova 操作汇总(限 libvirt 虚机) [Nova Operations Summary]
    理解 OpenStack 高可用(HA)(5):RabbitMQ HA
    [转]linux sort 命令详解
    [转]linux awk命令详解
    linux sftp 安全文件传输命令
    C++ Jsoncpp源代码编译与解析Json
    linux找不到动态链接库 .so文件的解决方法
    C++ Explicit Constructors(显式构造函数)
  • 原文地址:https://www.cnblogs.com/weijiutao/p/10649075.html
Copyright © 2020-2023  润新知