Это точно?
Да, как вы сказали, Example1 создает переменную на каждом рендере (помечая ее как "одноразовую" в конце scope - не относится к React, но Javascript), Example2 создает переменную один раз и поддерживает ее, пока компонент не будет размонтирован (или состояние этой переменной не изменится с помощью setState
).
И является ли один из этих методов предпочтительным с точки зрения производительности / хорошей практики?
Как хорошая практика - Пример1 .
Что касается производительности , это должно быть Example1 . Example2 запускает useState
и сравнивает значение a
с предыдущим состоянием на каждом рендере, который "намного дороже", чем объявление переменной.
Лучшим примером будет сравнение ссылка на компонент / запоминается переменная против переменной ( Example1 ):
function Example2() {
const a = useRef(1);
const b = useMemo(() => 1, []);
return <div>{a.current} , {b}</div>
}
Но ответ остается почти таким же.
Вид такого кода означает, что ref a
может измениться . Использование useMemo
означает, что b
- это переменная "тяжелых вычислений" , если нет, то это просто издержки (то же самое объяснение, что и выше), и лучше использовать Пример 1 .