为什么我不能直接修改组件的状态,真的吗?
我知道 React 教程和文档毫不含糊地警告说,状态不应该直接改变,一切都应该通过 。setState
我想了解为什么我不能直接更改状态,然后(在同一函数中)调用只是为了触发.this.setState({})
render
例如:下面的代码似乎工作得很好:
const React = require('react');
const App = React.createClass({
getInitialState: function() {
return {
some: {
rather: {
deeply: {
embedded: {
stuff: 1,
},
},
},
},
},
};
updateCounter: function () {
this.state.some.rather.deeply.embedded.stuff++;
this.setState({}); // just to trigger the render ...
},
render: function() {
return (
<div>
Counter value: {this.state.some.rather.deeply.embedded.stuff}
<br></br>
<button onClick={this.updateCounter}>Increment</button>
</div>
);
},
});
export default App;
我完全赞成遵循约定,但我想进一步了解ReactJS的实际工作原理,以及上面的代码可能会出错或它是否不理想。
this.setState
文档下的注释基本上确定了两个陷阱:
- 如果你直接改变状态,然后随后调用它可能会取代(覆盖?)你所做的突变。在上面的代码中,我不明白这是怎么发生的。
this.setState
- 这可能会以异步/延迟的方式有效地发生变化,因此在调用后立即访问时,您不能保证访问最终的突变状态。我明白了,如果这是更新函数的最后一次调用,这不是问题。
setState
this.state
this.state
this.setState
this.setState