С точки зрения вашего примера как есть, не сразу очевидно, что вызывает повторную визуализацию компонента. Тем не менее, документы , по-видимому, предполагают, что это не гарантия того, что повторный рендеринг не произойдет, если вы не изменили состояние:
Обратите внимание, чтоReact, возможно, по-прежнему нужно будет визуализировать этот конкретный компонент еще раз перед спасением. Это не должно вызывать беспокойства, поскольку React не будет излишне углубляться в дерево. Если вы выполняете дорогостоящие вычисления во время рендеринга, вы можете оптимизировать их с помощью useMemo.
Именно поэтому обычно рекомендуется запускать код, который может иметь побочные эффекты в useEffect
, например,
const [state, dispatch] = useReducer(someReducer, 0);
...
useEffect(() => {
if (state === 0) {
dispatch({ type: 'SOME ACTION' });
}
}, [state]);