前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在react中实现一个简单双向数据绑定

在react中实现一个简单双向数据绑定

作者头像
用户9914333
发布2022-07-21 19:45:54
3.8K0
发布2022-07-21 19:45:54
举报
文章被收录于专栏:bug收集bug收集

vue中的双向数据绑定非常的方便,那么如何在react中实现一个简单的双向数据绑定呢?

react实现一个简单的双向绑定


首先我们在input中添加一个onChange事件,然后把这个输入框的value绑定到state中

代码语言:javascript
复制
<Input placeholder="商品名" onChange={this.ProductName.bind(this)}
 value={this.state.inpValu}/>
代码语言:javascript
复制
constructor(props) {
        super(props)
        this.state = {
            inpValu:""
        }
    }

这个onChange事件会在这个input的值改变后触发,同时返回值,其中这个值的target下的value就是这个input当前的值,这样的话我们就只需要将这个值设置到state里input的value绑定的值就好了。

代码语言:javascript
复制
ProductName(e){
        this.setState({
            inpValu:e.target.value
        })
    }

这样的话就可以实现input的value的值改变,state中的值也会改变。state的值改变,input的value值也改变这样一个简单的双向数据绑定。 值得注意的是: 通过setState来修改state的值的话,它是异步的。想要设置完后就获取里面的值需要在它第二个参数中传递一个回调函数,在这个回调中可以获取修改完的值

代码语言:javascript
复制
chongZhi (){
   this.setState({ProductName:""},function () {
       console.log(this.state.ProductName);
   })
}

封装事件处理


如果一个页面表单元素太多,每一个写一个change对应的事件处理方法,重复代码太多,你会发现不同的元素,事件处理程序,只是setState对应的键名不同,那可以考虑封装?

思路:全都用一个事件处理程序,传不同的值进去就好了

代码如下:

代码语言:javascript
复制
constructor(){
        super()
        this.changeHandle = this.changeHandle.bind(this);
        this.state={
            name:"",
            pwd:"",
            email:""
        }
    }

代码语言:javascript
复制
render(){
    let {name,pwd,email} = this.state;
    return (
       <div>
           <input data-key="name" onChange={this.changeHandle} value={name}  type="text" />
           <input data-key="pwd" onChange={this.changeHandle}  value={pwd}  type="text" />
           <input data-key="email" onChange={this.changeHandle } value={email}  type="text"/>
           <span>name:{name}</span>
           <span>pwd:{pwd}</span>
           <span>email:{email}</span>
       </div>
    )
}
代码语言:javascript
复制
changeHandle(e){
        e.preventDefault()
        let key = e.target.dataset.key;
        this.setState({[key]:e.target.value})
 }
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bug收集 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档