react实现表单数据的实时绑定监听

import React,{Component} from 'react';

/**

 * 约束性和非约束性组件

 * 非约束性组:  <input type='text' defaultValue={this.state.username}/>这个defaultValue其实就是原生DoM中的value属性

 * 这样写出来的组件,其value值就是用户输入的内容,React完全不管输入的过程

 * 约束性组件:  <input type='text' value={this.state.username} onChange={this.handleUsername}/>

 * 这里,value属性不再是一个写死的值,他是this.state.username,this.state.username是由this.handleChange负责管理的

 * 这个时候实际上input的value根本不是用户输入的内容。而是onChange时间触发之后,由于this.setState导致了一次重新渲染。不过React会优化这个

 */

class ReactForm extends Component{

    constructor(props){

      super(props);

      //react可以在这里定义数据

 

      this.state={

          //这里面写一个对象

        msg:'react表单',

        name:'',

        sex:'1',

       city:'',

        citys:[

            '北京','上海','深圳'

        ],

        hobby:[

            {

                'title':"睡觉",

                'checked':true

            },

            {

                'title':"吃法",

                'checked':false

            },

            {

                'title':"敲代码",

                'checked':true

            },

 

        ],

 

        info:''

          }

    }

    handelSubmit=(e)=>{

        //阻止submit的提交事件

        e.preventDefault();

        console.log(this.state.name,this.state.sex,this.state.citys,this.state.hobby,this.state.info)

    }

 

    handelName=(e)=>{

      this.setState({

          name:e.target.value

      })

    }

    handelSex=(e)=>{

        this.setState({

           sex:e.target.value

        })

    }

    handelCity=(e)=>{

        this.setState({

           city:e.target.value 

        })

    }

 

    handelHobby(key){

        var hobby=this.state.hobby;

        hobby[key].checked=!hobby[key].checked;

        this.setState({

            hobby:hobby

        })

    }

    handelInfo=(e)=>{

        this.setState({

              info:e.target.value

        })

    }

 

    render(){

        return (

        <div>

           {this.state.msg}

           <form onSubmit={this.handelSubmit}>

                 用户名: <input type="text" value={this.state.name} onChange={this.handelName}></input><br/>

                 性别: <input type="radio" value="1" checked={this.state.sex==1} onChange={this.handelSex}/>男<br/>

                        <input type="radio" value="2" checked={this.state.sex==2} onChange={this.handelSex}/>女<br/>

                        居住城市: <select value={this.state.city} onChange={this.handelCity}>

                                    {

                                        this.state.citys.map(function(value,key){

                                            return <option key={key}>{value}</option>

                                        })

                                    }

                        </select>

                        爱好:

                                    {

                                        this.state.hobby.map((value,key)=>{

                                            return (

                                                 <div key={key}>

                                                    {value.title}<input type="checkbox" checked={value.checked} onChange={this.handelHobby.bind(this,key)}/>

                                                 </div>

                                          

                                            )

 

                                        })

                                    }

                                    <br/>

                                  备注:  <textarea value={this.state.info} onChange={this.handelInfo}/>

                  <input type="submit" value="提交"></input>

 

           </form>

        </div>

     

        )

    }

}

export default ReactForm;

注意多选框和radio的函数写法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以通过refs方式拿到Antd的Form表单的name,并且可以使用双向绑定的方式来进行数据的操作。 例如,可以在Form组件添加一个ref属性,如下: ``` <Form ref="formRef" /> ``` 然后可以通过this.refs.formRef来获取到Form组件的实例,再通过 getFieldDecorator 方法为表单控件绑定数据,例如: ``` const { getFieldDecorator } = this.refs.formRef; getFieldDecorator('username', { rules: [{ required: true, message: 'Please input your username!' }], initialValue: '', })( <Input placeholder="Username" /> ) ``` 这样可以将数据绑定表单组件,并且实现双向绑定。在获取表单数据时,则可以使用this.refs.formRef.getFieldsValue() 方法来获取所有表单控件的。可以在表单提交时调用该方法获取数据并进行处理。 ``` handleSubmit = (e) => { e.preventDefault(); const { form } = this.refs.formRef; form.validateFields((err, values) => { if (!err) { console.log('Received values of form: ', values); } }); } ``` ### 回答2: 要获取Antd的Form表单的name并进行双向绑定,我们可以使用React的状态管理和Antd的Form组件内置的getFieldDecorator和getFieldValue方法。 首先,我们需要引入ReactAntd相关的库和组件: ``` import React, { useState } from 'react'; import { Form, Input } from 'antd'; ``` 然后,在组件定义一个状态来保存表单的name: ``` const [name, setName] = useState(''); ``` 接下来,在Form组件使用getFieldDecorator来获取和设置name: ``` <Form> <Form.Item> {getFieldDecorator('name', { initialValue: name, rules: [{ required: true, message: '请输入姓名' }], })(<Input onChange={(e) => setName(e.target.value)} />)} </Form.Item> </Form> ``` 在getFieldDecorator,我们将name属性与name状态进行绑定,通过initialValue设置初始,并设置规则。 最后,在Input组件,通过onChange事件监听输入框的变化,并通过setName方法将输入的更新到name状态。 这样,当用户输入姓名时,name状态会实时更新,实现了双向绑定。 同时,我们还可以使用getFieldValue方法来获取name的: ``` const onSubmit = () => { const nameValue = getFieldValue('name'); console.log(nameValue); // 输出name } ``` 在提交表单的时候,通过getFieldValue获取name,可以进一步处理或传递给其他函数。 ### 回答3: 在Ant Design,如果你想要获取Form组件的某个字段的,可以使用Form组件提供的getFieldValue方法来获取。首先,你需要在Form组件设置对应字段的name属性。 例如,你在Form组件设置了一个Input组件,它的name属性为"username",你想要获取该字段的,那么你可以在代码使用getFieldValue("username")来获取,这个方法将返回该字段的。 需要注意的是,在使用getFieldValue方法之前,你需要先调用Form组件提供的getFieldDecorator方法对该字段进行装饰,这样才能确保可以在Form组件获取到该字段的。 至于双向绑定,Ant Design的Form组件支持使用getFieldDecorator方法进行双向绑定。你可以在getFieldDecorator方法设置initialValue属性来指定字段的初始。当表单发生变化时,相关字段的也会相应更新。 例如,你可以使用getFieldDecorator方法装饰一个Input组件,设置对应字段的name属性和initialValue属性,这样就可以实现双向绑定。 总之,通过设置name属性并使用getFieldValue方法来获取Form表单的字段,并通过getFieldDecorator方法实现双向绑定,你可以轻松地操作和获取Ant Design的Form表单

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值