我初学react写了一个小组件,在更新组件状态的时候发现计算数据有些不正确。请教一下。
▼如下图:
目的是每增加一个苹果,苹果数量增加一个,同时更新总重&总计金额。
目前问题是,从0增加到1个苹果时,合计金额没有变化。请帮看一下哪里的问题。谢谢老司机。
good man one life safe.
▼部分相关代码如下
<body>
<div id="div01">
插件未正确加载
</div>
<script type="text/babel">
var BuyApple = React.createClass({
render: function () {
return (
<div >
<p>
购买<span>{this.state.shuLiang}</span>个苹果,
每个<span>{this.state.danZhong}</span>斤,
每斤<span>{this.state.danJia}</span>元,
一共<span>{this.state.zongZhong}</span>斤,
合计<span>{this.state.zongJi}</span>元。
</p>
<input type="button" value="增加苹果" onClick={ this.addApple}/>
<input type="button" value="减少苹果" onClick={ this.reduceApple}/>
<input type="button" value="增加单价" onClick={ this.addMoney}/>
<input type="button" value="减少单价" onClick={ this.reduceMoney}/>
</div>
);
},
getInitialState:function () {
return{
shuLiang: 0, //数量
danZhong: 0.5, //单重
danJia:2, //单价
zongZhong: 0, //总重
zongJi: 0, //总计
}
},
addApple:function () {
this.setState({ //▼问题八成出在这里
shuLiang: ++this.state.shuLiang, //苹果数量加1
zongZhong: this.state.shuLiang * this.state.danZhong, //苹果总重=数量*单重
zongJi: this.state.zongZhong * this.state.danJia, //总计=总重*单价
});
},
});
ReactDOM.render(
<BuyApple/>,
document.querySelector('#div01'),
);
</script>
</body>
最主要的原因是
setState
是个异步的操作两个方案
按照楼上说的,总重在render里去算
setState
有第二个参数,是个callback
,可以拿到新的state
,你可以在这个callback里去设置总重,甩一个文档当然,我建议你用第一种方案