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