Reactjs React JS等待useeffect完成所有渲染

Reactjs React JS等待useeffect完成所有渲染,reactjs,Reactjs,我的react应用程序中有下一种情况。我有一个从另一个组件设置的状态:const[test,setTest]=useState(),设置此状态时,会创建一些渲染,如: 第一次渲染test=第一个值 第二次渲染test=第一个值 上次渲染test=预期值 我想做的是只读取useEffect钩子中test的最后一个值,如下所示: useffect(()=>{ //这里我需要避免前面的test值,只显示最后一个 控制台日志(测试); },[测试]您可以在uesEffect外部初始化计数器变量,并

我的react应用程序中有下一种情况。我有一个从另一个组件设置的状态:
const[test,setTest]=useState(),设置此状态时,会创建一些渲染,如:

  • 第一次渲染
    test=第一个值
  • 第二次渲染
    test=第一个值
  • 上次渲染
    test=预期值

    我想做的是只读取useEffect钩子中test的最后一个值,如下所示:
  • useffect(()=>{
    //这里我需要避免前面的test值,只显示最后一个
    控制台日志(测试);
    
    },[测试]您可以在uesEffect外部初始化计数器变量,并在每次运行uesEffect时递增它。一旦满足了所需的条件(例如,如果(计数器===2)),则运行console.log

    所以


    我不认为最好的解决方案是等待useEffect的第三次调用。这已经意味着前两个渲染是无用的,不是太优化,但ok

    另一方面,为什么不在需要的地方测试值呢

    if(!!test&&test==expectedValue)

    或者在jsx/tsx中:


    {!!test&&test==expectedValue&&}

    请不要发布@Yousaf,我将删除该问题,可能会使用取消公告功能,在时间窗口内未收到更新时将触发该功能。这是设计问题,如评论中所述,我不知道将有多少渲染,预期值是动态的。你知道需要跳过多少渲染吗?不,我不知道,然后你需要更改设计。这是因为在您当前的设计中,您依赖于未来。在任何给定点,程序都无法知道它是否是最后一次渲染。它永远不能保证在当前渲染之后不会有另一个渲染。您可以做的是找出导致该渲染的原因,然后使用if来查看是否满足该特定条件,并将其记录在控制台日志中。预期值为dynamicSo在开始时将test设置为null,然后测试状态是否为null?操作员
    !!test
    可以这样做,它测试变量是否存在,以及它是否为null或未定义
    let counter = 0;
    useEffect(()=>{
    counter++;
    if(counter==2){
       console.log(test)
    }
    },[test])