【发布时间】:2021-05-07 01:01:27
【问题描述】:
我想知道是否有更好的方法来实现与以下相同的目标。此代码有效,但它强制此 useEffect 安装和卸载几次,然后才能通过 if 语句,这并不理想。
我有一个如下所示的 useEffect...
useEffect(() => {
console.log("setNames mounted")
if (devices !== null && deviceNames !== null){
setNames(trueDeviceNames(devices.devices, deviceNames.values))
}
return ()=> {
console.log("setNames un-mounted")
}
}, [devices, deviceNames])
我还有 2 个用于获取数据和 setDevices 和 setDeviceNames 的 useEffects。在他们完成提取并且不再为空之前,我不想运行这个 useEffect。我的代码有效,但肯定有更简洁的方法来实现这一点吗?
【问题讨论】:
-
这完全没问题,它是用来重置自己的。您可以删除卸载(无用)功能。如果
trueDeviceNames计算量不大,您甚至可以完全删除状态并在渲染阶段调用它。例如<span>{trueDeviceNames(devices.devices, deviceNames.values)}</span> -
有趣。我认为有一种更简洁的方法可以做到这一点,因为每次我的依赖项发生变化时都会调用 useEffect。但是,仅在满足条件时设置状态。问题是,如果我有很多 useEffects 被调用但没有通过条件,它可能会导致不必要的安装和卸载导致性能问题,或者奇怪的副作用。
-
在这种情况下,还有 useMemo 可能比 state 更合适,再加上您优化的依赖项(在您的其他评论中)
标签: reactjs state use-effect