【发布时间】:2020-03-09 15:02:42
【问题描述】:
我最近阅读了 react.js documentation 并发现根据之前的状态值设置状态不一致。这是这段代码:
class Example extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0
};
}
render() {
return (
<div>
<p>You clicked {this.state.count} times</p>
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
Click me
</button>
</div>
);
}
}
我认为设置state 的这种方式() => this.setState({ count: this.state.count + 1 }) 是错误的,您应该为此使用回调。所以我提出了PR,在其中我添加了对先前状态的回调函数的使用,但它已被弃用,因为
当您不确定捕获的状态值是什么时,回调版本很有用。
我真的不喜欢你不是解释的某些部分,有人可以解释为什么这样做() => this.setState({ count: this.state.count + 1 }) 设置状态是正确的。
提前致谢。
【问题讨论】:
-
在这个例子中,你并没有真正面临获得过时状态副本的风险。您只调用一次
setState,并且每次渲染该事件只会发生一次。所以似乎不需要使用回调。 -
我已要求对 PR 进行澄清。这就是这次谈话的地方。
-
@BrianThompson 我不相信在他们自己的例子中反对 React doc 的 own guidelines 是个好主意。
-
@DaveNewton 谢谢
-
Пожалуйста - IMO 你是对的,应该更新示例以保持一致。
标签: javascript reactjs setstate