我已经看到了这个答案:useMemo vs. useEffect + useState,它总结起来很不错useEffect
,但就我而言,我想执行一个昂贵的操作,该操作将尽早更改DOM。将useMemo()
仍然被代替的建议useLayoutEffect()
与状态更新?效果的双重渲染->状态更新会否提高性能?
编辑
useLayoutEffect()
场景:
useLayoutEffect(() => {
const tokens = expensiveOperationGeneratingClasses(param1)
setTokens(tokens)
},
[param1])
render (
<>
{
tokens.map(token => <span className={token.id}/>)
}
</>
)
Run Code Online (Sandbox Code Playgroud)
useMemo
场景:
const tokens = useMemo(() => {
return expensiveOperationGeneratingClasses(param1)
},
[param1]
render (
<>
{
tokens.map(token => <span className={token.id}/>)
}
</>
)
Run Code Online (Sandbox Code Playgroud)
实际上,我意识到我不是在进行DOM操作,而是在呈现<span>
标记之前生成类名以避免闪烁,所以我认为我最好使用useMemo
,对吗?