Javascript 我应该在setState中使用callback,还是可以在React中不使用calback?
请帮助理解ReactJavascript 我应该在setState中使用callback,还是可以在React中不使用calback?,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,请帮助理解ReactsetState的实际工作原理。 下面是一个例子: 类应用程序扩展了React.Component{//第一个示例 状态={ 点击次数:0 }; handleButtonClick=this.handleButtonClick.bind(this); 把手按钮点击(){ this.setState({//像这样?还是应该使用回调而不是对象? 点击:this.state.clicks+1 }); } render(){ 返回( 计数:{this.state.clicks} 点击
setState
的实际工作原理。
下面是一个例子:
类应用程序扩展了React.Component{//第一个示例
状态={
点击次数:0
};
handleButtonClick=this.handleButtonClick.bind(this);
把手按钮点击(){
this.setState({//像这样?还是应该使用回调而不是对象?
点击:this.state.clicks+1
});
}
render(){
返回(
计数:{this.state.clicks}
点击
);
}
}
如果多次调用setstate,则应使用回调:
this.setState(prevState=>({//第二个示例
单击:prevState.clicks+1
}));
this.setState(prevState=>({
单击:prevState.clicks+1
}));
调用的方式如下:setState
然后setState
。
但在第一个示例中,我们有一个调用setState
:
然后单击setState
,然后单击setState
看到了吗?在第一个示例中,我们在setState
之间单击。
在第二个示例中,我们没有单击,而是立即逐个调用
问题:我们应该使用回调而不是对象吗?为什么?现在一切正常
我在互联网上搜索了很长一段时间,但没有找到关于这个案件的好论点
顺便说一句,很抱歉我的英语不好。我想你所说的回调实际上是指
setState
的函数形式
要回答您的问题,一般的经验法则是——如果状态的下一个值取决于它以前的值——使用函数形式setState
原因是当您调用this.setState({clicks:this.state.clicks+1})时连续编码>多次,对这些调用进行批处理,以避免不必要的对账操作。因此,例如,当您像那样调用3次setState
时,您希望单击的最终值是3
,但它将是1
,因为所有更新都是批处理的,并使用0
的初始值来计算下一个状态
另一方面,当您使用函数形式setState
时,状态更新将排队,因此将使用状态的先前值逐个执行更新
.这里有很多东西:
您应该在您的状态和所有绑定所在的组件中使用构造函数。像这样:
setState
是一个异步操作,因此如果您希望仅在设置状态后发生某些事情,则必须在setState中使用callback,但在您的情况下,您将该函数用作单击处理程序。React会自动处理此问题,您不必担心多次单击按钮。它将始终注册点击并正确增加点击次数
这回答了你的问题吗?谢谢但是你的第二个答案呢?它是怎么工作的?谢谢。我知道你在说什么。但在我的情况下,一切正常。如果我理解你的问题是正确的,我链接的帖子应该提供更多细节。
class App extends React.Component {
constructor(props){
super(props);
this.state = {
clicks: 0
}
this.handleButtonClick = this.handleButtonClick.bind(this);
}
//rest of our component here....
}