使用reactjs setState回调获取上一个输入值的计算值
Calculated value getting previous input value using reactjs setState callback
我正在通过创建一个将给定数字加倍的简单计算器来学习reactjs。调用this.setState的回调时,它具有this.state.amount的现有值,而不是刚刚输入的新值。
handleAmountChange: function(event) {
this.setState({amount: event.target.value}, this.calculate());
},
calculate: function() {
this.setState({calculatedAmount: this.state.amount * 2});
}
我应该怎么做才能在计算函数中获得这个.state.amount的最新版本?
https://plnkr.co/edit/FoTEK9PglqhUajq1lLXJ?p=preview
看看这个答案。简而言之,setState
只创建了一个挂起的状态转换,而不是立即的状态突变。
在您的情况下,我认为最干净的方法是使用refs
,而不是将输入的值传递给状态并从中读取:
var Calculator = React.createClass({
getInitialState: function() {
return {
calculatedAmount: 0.0
};
},
calculate: function() {
this.setState({calculatedAmount: this.refs.myNumber.value * 2});
},
render: function(){
return (
<div id="calculator">
<h3>Calculator</h3>
<input type="text" ref="myNumber" onChange={this.calculate} />
<span>{this.state.calculatedAmount}</span>
</div>
);
}
});
编辑:我意识到你使用回调的解决方案是完全有效的,但它不起作用,因为你正在执行回调函数,而不是传递它
handleAmountChange: function(event) {
this.setState({amount: event.target.value}, this.calculate);
},
calculate: function() {
this.setState({calculatedAmount: this.state.amount * 2});
}
在您的特定情况下,您可以一次设置多个状态,即在handleAmountChange中执行计算。
var Calculator = React.createClass({
getInitialState: function() {
return {
amount: 0.0,
calculatedAmount: 0.0
};
},
handleAmountChange: function(e) {
var input = e.target.value;
this.setState({amount: input, calculatedAmount: input * 2});
},
render: function(){
return (
<div id="calculator">
<h3>Calculator</h3>
<input type="text" value={this.state.amount} onChange={this.handleAmountChange} />
<span>{this.state.calculatedAmount}</span>
</div>
);
}
});
ReactDOM.render(<Calculator />, document.getElementById('container'
));
相关文章:
- 计算输入中有多少逗号分隔的字符串
- 从表单中获取用户输入执行计算(操作顺序)并输出回该表单
- Javascript-如何使用bootstrap日期时间选择器自动计算两个时间输入之间的差异
- 计算输入值
- 如何从范围滑块动态值计算输入值
- 使用reactjs setState回调获取上一个输入值的计算值
- 在添加的输入字段中计算TOTAL
- 基于输入框的角度JS计算
- 计算输入的每个单词组合的百分比
- 对表单输入执行计算
- 当用户在文本框中输入日期时,如何计算一年的持续时间
- 使用 JavaScript 计算并添加表单输入的值
- 使用单选按钮的输入计算分数
- Javascript - 根据用户的表单输入计算用户的年龄
- 从用户输入计算日期
- 不使用eval()从表单输入计算数据
- 如何根据 3 个下拉列表中的输入计算值
- 通过文本字段输入计算余额和预付款
- JavaScript中的动态输入计算
- Javascript动态输入计算