我想建立一个网络应用程序,计算每天应该为未来旅行节省多少钱(我知道它可以很容易地通过一个简单的计算器来完成,但这是为学习的缘故)。反应:状态不是实时渲染
我的问题是,当我在两个输入中输入成本和时间时,日常储蓄计算不会实时呈现在DOM上。
这里是会发生什么:
- I型在第一输入(成本要素内)成本和留在第二输入的天数(的timeleft组件内)
- 的DOM使两者的成本而留在我键入时(在
{this.state.totalCost}
和{this.state.timeLeft}
- 的计算结果
{this.state.dailyCost}
呈现了“一个变”延迟(即成本= 100 = 10 我需要输入一些东西剩下的天实时天否则像添加一个0的成本为10在DOM中渲染为正确的结果的计算。)
谢谢你的帮助!我希望我以一种可以理解的方式解释。
我的代码:
class App extends Component {
constructor() {
super();
this.state = {
totalCost: 0,
timeLeft: 0,
dailyCost: 0,
}
}
updateDailySavings() {
if (this.state.timeLeft !== 0) {
this.setState({dailyCost: (this.state.totalCost/this.state.timeLeft).toFixed(2)});
} else {
this.setState({dailyCost: 0});
}
}
changeCost(newCost) {
this.setState({totalCost: Math.round(newCost)});
this.updateDailySavings()
}
changeTimeLeft(newTimeLeft) {
this.setState({timeLeft: Math.round(newTimeLeft)});
this.updateDailySavings()
}
render() {
return (
<div className="App">
<header className="App-header">
<h1 className="App-title">Welcome to React</h1>
</header>
<Cost changeCost={this.changeCost.bind(this)}/>
<TimeLeft changeTimeLeft={this.changeTimeLeft.bind(this)}/> <br/>
<div>You have to save £{this.state.totalCost} in the next {this.state.timeLeft} days.<br/>
You have to save £{this.state.dailyCost} per day.
</div>
</div>
);
}
}
'setState'是异步的。如果您需要立即使用状态值,则应该使用回调。 'this.setState({some:'value'},()=> {/ * .. doSometing .. * /})' – bennygenel