反应:以前的道具在componentDidUpdate中不正确

时间:2020-06-10 12:02:48

标签: javascript reactjs react-native

用例是定义一个回调道具,需要比较其在componentDidUpdate中的值,并根据此值执行一些操作。 但是componentDidUpdate中的先前道具与新道具相似。

在这里可以看到code sandbox link

1 个答案:

答案 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>
    );
  }

Edit FORM VALUES

相关问题