用例是定义一个回调道具,需要比较其在componentDidUpdate
中的值,并根据此值执行一些操作。
但是componentDidUpdate中的先前道具与新道具相似。
在这里可以看到code sandbox link。
答案 0 :(得分:2)
componentDidUpdate中的值相同的原因是,您正在从父级调用一个函数,该函数将返回状态值,并且由于sstate值在调用该函数时已更新,因此它将返回新值。
但是,如果您将状态值复制到render中的变量中,然后在函数内部使用它,它将返回您的旧值,因为该值随后受闭包的约束,即您使用函数的词法作用域中的变量它的创建,当组件重新呈现时,将使用词法范围中状态的更新值创建新的函数引用
render() {
const val = this.state.myCallback;
return (
<div className="App">
<button onClick={this.updateCallback} type="button">
UPDATE CALLBACK
</button>
<Child myCallback={() => val} />
</div>
);
}