Я видел такой ответ: useMemo против useEffect + useState, и он хорошо суммирует его для useEffect
, но в моем случае я хочу выполнить дорогостоящую операцию, которая изменит DOM как можно раньше. Будет ли useMemo()
вместо useLayoutEffect()
с обновлением состояния? Отражает ли двойной рендеринг эффекта → обновление состояния какое-либо повышение производительности?
РЕДАКТИРОВАТЬ
useLayoutEffect()
:
useLayoutEffect(() => {
const tokens = expensiveOperationGeneratingClasses(param1)
setTokens(tokens)
},
[param1])
render (
<>
{
tokens.map(token => <span className={token.id}/>)
}
</>
)
сценарий useMemo
:
const tokens = useMemo(() => {
return expensiveOperationGeneratingClasses(param1)
},
[param1]
render (
<>
{
tokens.map(token => <span className={token.id}/>)
}
</>
)
На самом деле я понял, что я не выполняю DOM-операции, а просто генерирую имена классов перед рендерингом тегов <span>
чтобы избежать мерцания, поэтому я думаю, что мне лучше использовать useMemo
, я прав?