我已经看到了这个答案: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,对吗?