В каких случаях useEffect используется без второго аргумента в виде массива и для чего это делается?

В каких случаях рекомендуется использовать useEffect без второго аргумента в виде массива?
Обычно в примерах useEffect используется с пустым массивом []. 
Зачем добавили возможность рекурсивной работы хука useEffect?
  • 2 октября 2023 г. 7:37
Ответы на вопрос 2
useEffect без второго аргумента в виде массива используется, когда требуется выполнить эффект только один раз при монтировании компонента. В этом случае, эффект будет выполняться при каждом рендере компонента.

Рекомендуется использовать useEffect без второго аргумента в виде массива, когда эффект не зависит от изменений каких-либо переменных и не требует повторного выполнения при изменениях. Например, использование useEffect без второго аргумента может быть полезно для выполнения запроса к API при загрузке компонента или для добавления слушателей событий, которые не изменяются во время жизни компонента.

В новой версии React 18 добавили возможность рекурсивной работы хука useEffect, когда он вызывается изнутри самого эффекта. Это позволяет выполнять эффект снова после каждого рендера компонента. Рекурсивное использование useEffect может быть полезным, когда эффект зависит от каких-либо переменных и должен быть выполнен снова при их изменении.
Используйте этот подход, когда у вас есть реф, и значение текущего рефа может меняться в процессе работы компонента. Вкратце, вы можете использовать код ниже:

```jsx
const ref = useRef(null);
const prevRef = useRef(null);

useEffect(() => {
    if (ref.current === prevRef.current) { return; }
    prevRef.current = ref.current;

    // Здесь выполняется код, когда реф меняется
});
```

На самом деле, этот код делает то же самое, что и депенденсы, но депенденсы не подходят в данном случае по двум причинам:

1) [ref] - бесполезно, так как оно будет всегда одно и то же, и эффект не будет вызываться заново.
2) [ref.current] - бесполезно, так как значение рефа изменяется после фазы рендера.
Похожие вопросы