react 使用stateHook如何在state字段更新后执行副作用(Effect Hook)
场景:在更新了state中的字段A后需要调用一个更新数据的方法getData,此方法需要使用字段A的值,如何保证getData方法拿到的A是最新的。如果不使用Hook,则可以1.使用this.setState()传递两个参数,一是更新state的对象或者函数,二是state设置生效后需要执行的副作用。2.在生命周期componentDidUpdate中监听A字段的变化this.setState({
·
场景:在更新了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只会执行一次。
更多推荐
所有评论(0)