场景:在更新了state中的字段A后需要调用一个更新数据的方法getData,此方法需要使用字段A的值,如何保证getData方法拿到的A是最新的。
如果不使用Hook,则可以1.使用this.setState()传递两个参数,一是更新state的对象或者函数,二是state设置生效后需要执行的副作用。2.在生命周期componentDidUpdate中监听A字段的变化

this.setState(
        {
          A:'newData'
        },
        () => {
          this.getData(true);
        }
      );

如果使用了Hook在更新A字段时,无法传递第二个回调参数,如果需要在A更新后执行副作用,且副作用函数中需要拿到最新的A字段值,可以通过使用useEffect

  const [A, setA] = useState<string>("");
  useEffect(() => {
    getData();
  }, [A]);
  

如果getData中使用的state字段不止一个,也可以在useEffect的第二个参数中加入其他关联字段。

 const [A, setA] = useState<string>("");
 const [B, setB] = useState<string>("");
 const [C, setC] = useState<string>("");
  useEffect(() => {
    getData();
  }, [A,B,C]);
  function update(){
    setA('a')
    setB("b");
    setC("c");
  }

如果ABC是在同一个地方更新的,getData只会执行一次,如执行了update方法后ABC字段都更新了,但是getData只会执行一次。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐