Как работает useMemo, если массив зависимостей передан, пуст или не передан?

Использование useMemo с пустым массивом зависимостей ([]) означает, что мемоизация произойдет только один раз при первом рендере компонента.

Короткий ответ

Что ответить на собеседовании

Использование useMemo с пустым массивом зависимостей ([]) означает, что мемоизация произойдет только один раз при первом рендере компонента. В случае с компонентом ProductList это значит, что если список продуктов изменится, мемоизированное значение не обновится, и новые продукты не отобразятся. Чтобы отображать актуальные данные, зависимости в useMemo должны включать переменную с продуктами, например:

Подробный разбор

Ответ с пояснениями

Использование useMemo с пустым массивом зависимостей ([]) означает, что мемоизация произойдет только один раз при первом рендере компонента. В случае с компонентом ProductList это значит, что если список продуктов изменится, мемоизированное значение не обновится, и новые продукты не отобразятся. Чтобы отображать актуальные данные, зависимости в useMemo должны включать переменную с продуктами, например:

const memoizedProducts = useMemo(() => products, [products]);

Что касается AddProductForm, если кнопка вызывает handleSubmit через onClick, это может привести к проблемам с валидацией и поведением формы. Правильный способ — использовать обработчик onFinish на самом элементе <Form>, который вызывается после успешной валидации. Кнопка должна иметь htmlType="submit", чтобы инициировать сабмит формы:

<Form onFinish={handleSubmit}>
  {/* поля формы */}
  <Button htmlType="submit">Добавить</Button>
</Form>

Так форма корректно обрабатывает валидацию и сабмит.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку