Назад к вопросам
Middle
2
Объект передаётся из родительского компонента в дочерний через пропсы и кладётся в зависимости useMemo. Сколько раз отработает useMemo? Как оптимизировать, чтобы useMemo пересчитывался только один раз?
Компании, где спрашивали
Smitex
Ответ от нейросети
sobes.tech AI
Если объект передаётся из родительского компонента в дочерний через пропсы и используется в зависимости useMemo, то useMemo будет пересчитываться каждый раз, когда родительский компонент рендерится, если объект создаётся заново при каждом рендере (например, если он объявлен прямо в JSX или в теле функции).
Это происходит потому, что объекты в JavaScript сравниваются по ссылке, и при каждом новом создании объекта ссылка меняется, даже если содержимое одинаковое.
Чтобы useMemo пересчитывался только один раз, нужно:
- Создавать объект вне компонента или мемоизировать его в родителе с помощью useMemo или useCallback, чтобы ссылка на объект не менялась.
Пример:
// В родителе
const memoizedObject = useMemo(() => ({ key: 'value' }), []);
<ChildComponent obj={memoizedObject} />
// В дочернем компоненте
const memoizedValue = useMemo(() => {
// вычисления с obj
}, [obj]);
Так useMemo в дочернем компоненте сработает только один раз, потому что ссылка на obj не меняется.