我是新來ReactJS和我似乎無法找出爲什麼下面的setState的結果並不像我期望它(即增加值每秒1)的setState在ReactJS
import React from 'react';
import ReactDOM from 'react-dom';
class Layout extends React.Component {
constructor() {
super();
this.state = {
name: "Behnam",
i: 0
}
}
render() {
setInterval(() => {
this.setState({ name : "Behnam" + this.state.i });
this.setState({ i: this.state.i + 1 });
}, 1000);
return (
<div className="container">
{this.state.name}
</div>
);
}
}
ReactDOM.render(<Layout />, document.getElementById('app'));
相反,輸出字符串會迅速增加(我猜測反應速度與嘗試保持虛擬DOM更新一樣快)。所以我想知道什麼是正確的方法來做到這一點?
你做錯了。知道setState會觸發渲染方法,所以在你的代碼中,你已經做了一些循環的渲染> setState> render> setState ....好的方法是把setInterval放在組件生命週期的組件生命週期(https:/ /facebook.github.io/react/docs/component-specs.html),所以你的渲染將只是聲明性的 –