> Можно ли реализовать логику без useEffect в React и как? (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Альфа-банк
Стек: React
> Пример ответа
Да, логику без useEffect можно и часто нужно реализовывать. Основная идея - перенести побочные эффекты в обработчики событий, вычисляемые значения и синхронные преобразования данных.
1. Обработчики событий (вместо useEffect для реакций на действия пользователя) Вместо:
JSXuseEffect(() => {if (submitted) {fetch('/api/data', { method: 'POST', body: data });}}, [submitted, data]);
Используйте:
JSXconst handleSubmit = () => {fetch('/api/data', { method: 'POST', body: data });};
2. Вычисляемые значения через useMemo (вместо useEffect для синхронных преобразований) Вместо:
JSXconst [filtered, setFiltered] = useState([]);useEffect(() => {setFiltered(items.filter(item => item.active));}, [items]);
Используйте:
JSXconst filtered = useMemo(() => items.filter(item => item.active), [items]);
3. Синхронные обновления состояния (вместо useEffect для каскадных изменений) Вместо:
JSXconst [a, setA] = useState(0);const [b, setB] = useState(0);useEffect(() => {setB(a * 2);}, [a]);
Используйте:
JSXconst [a, setA] = useState(0);const b = a * 2; // просто переменная
4. Использование библиотек для управления состоянием (Redux, Zustand, Jotai) Они позволяют описывать логику как чистые функции или саги/эффекты вне компонентов, избегая useEffect в UI-слое.
5. useSyncExternalStore (для подписки на внешние хранилища) Вместо useEffect с подпиской на window или сторонние сервисы.
Итог: useEffect стоит оставлять только для случаев, когда синхронизация с внешней системой (API, DOM, таймеры) не может быть выполнена синхронно или в обработчике.
> Похожие задачи по frontend
Как работает обновление состояния при нескольких вызовах setState в React?
Нужно ли использовать useEffect для подписки на изменения неконтролируемого input с ref в React?
Можно ли сделать общий стейт для формы, чтобы получать значения по имени поля
Увидим ли мы изменения в дочернем компоненте через пропсы, если переменная изменилась, но ререндер не произошел?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью