为何在React的setState方法中可直接使用prevState作为函数参数?
为什么setState函数式更新中可以直接使用prevState?
这其实是React中setState的函数式更新特性,原理很直白:
setState支持两种调用形式:一种是直接传入状态对象,另一种是传入回调函数。- 当你传入回调函数时,这个函数的参数是React框架自动帮你传递的:第一个参数就是组件更新前的旧状态(也就是你代码里的
prevState),第二个参数是当前的props。 - 你代码里的
prevState只是这个回调函数的形参名称,不是需要提前定义的变量——你哪怕把它改成oldState或者lastState,一样能正常工作,React都会把更新前的state对象传给它。
拿你这段代码举例:
this.setState(prevState => { return { counter: prevState.counter + 1 }; });
React在执行这个回调时,会自动把当前组件的旧state(比如初始的{counter: 0}或者之前更新后的状态)作为实参传给这个函数,你通过prevState这个形参就能拿到这个旧状态,进而计算出新的counter值。
这种函数式更新的核心价值在于,当新状态依赖旧状态时,能确保你拿到的是最新的旧状态——因为setState是异步执行的,如果直接用this.state.counter + 1,可能会因为更新队列的存在导致拿到的不是最新值,而用prevState就不会有这个问题。
内容的提问来源于stack exchange,提问作者Edharad
相关产品推荐
相关产品推荐

