Когда я не буду передавать список зависимостей в React useEffect?

#javascript #reactjs #react-hooks

#javascript #reactjs #реагирующие хуки

Вопрос:

в каком случае я не должен помещать пустой массив [] в качестве зависимостей в react useEffect? Нравится

 React.useEffect(() => {
    if (true) {
      doStuff()
    }
    return () => null;
  });
 

Является ли приведенный выше код допустимым?

Комментарии:

1. Это действительно. Это означает, что эффект запускается каждый раз, когда компонент повторно отображает

Ответ №1:

Ваш код действителен.

undefined передается как зависимости и означает useEffect , что выполняется при каждом рендеринге. Итак, если вы хотите выполнить какую-то работу, которую не следует запускать при каждом рендеринге (например, добавить прослушиватель событий), вы должны предоставить массив зависимостей.

Комментарии:

1. в каком случае мы ставим его как неопределенный?

2. если вы ничего не укажете (даже пустой массив) в качестве зависимости, undefined он будет передан.

3. да, вы уже это говорили, в каком случае вы это делаете?

4. Вы можете ничего не передавать, если хотите что-то делать каждый раз при обновлении компонента. Но чаще всего вы, вероятно, хотите, чтобы этот эффект произошел только из-за чего-то другого. Возможно, вы хотите что-то делать только при изменении данных или, может быть, когда пользователь впервые видит компонент.

Ответ №2:

просто запомните 3 правила:

 useEffect(()=>{},[]) //this is like componentDidMount
useEffect(()=>{}) //this will run every render
useEffect(()=>{},[dep1, dep2]) //this will run if one on de dependency change