react(二) 受控组件 react controlled components

受控组件的意思就是每当表单的状态发生变化时,都会被写入组件的state中,这种组件被称为受控组件

普通的组件无法改变输入框的值,那么将input组件和state结合起来再绑定onChange事件,最后再使用state实时更新value值,显示在input中,这样就形成了一个受控组件

在我们的例子中,input的一个类型为radio的单选按钮,根据选中项来设定指定不同的速度,同时根据不同的速度实时去更新单选按钮的选中状态,这样就形成了一个受控组件

//duration是state

<label><input type="radio" name="time" value="0.13" onChange={this.handledurationChange} checked={(this.state.duration == "0.13") ? "checked" : ""}/>快</label>
<label><input type="radio" name="time" value="0.55" onChange={this.handledurationChange} checked={(this.state.duration == "0.55") ? "checked" : ""}/>正常</label>
<label><input type="radio" name="time" value="1" onChange={this.handledurationChange} checked={(this.state.duration == "1") ? "checked" : ""}/>慢</label>
handledurationChange = (event) =>{
this.setState({
duration: event.target.value
})
//此处打印的结果是上一次的duration,因为react会把传进来的state缓存起来,稍后再更新到state上
//因此,如果要在此处使用duration进行运算的话需要另想办法
console.log("duration2:"+ this.state.duration);
}

这样,用户点击不同已经可以选中不同的单选按钮,但是打印出来的duration结果并不是我们期待的更新后的值,而是上一次的值。因为react会把传进来的state缓存起来,把这个对象放入一个更新队列中,稍后才会从队列当中把新的状态提取出来合并到state中,然后再触发组件更新。

虽然此刻获取到的值不是最后的duration的值,但是经过测试, 在其他方法中使用duration的时候,其值已经更新,可以正常使用!

另外,如果想在此刻使用新的duration的值进行计算,那么可以引出setstate的另一种使用方法,就是接收一个函数作为参数

handledurationChangeTest = (event) =>{
this.setState((prevState) => {
return{duration:0}
})
this.setState((prevState) => {
return{duration: prevState.duration+1}
})
console.log("duration2:"+ this.state.duration);
}

测试代码是可以正常显示duration的变化,说明使用函数进行传参的方法是可行的!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值