Могу ли я использовать динамические c свойства в массиве зависимостей для useEffect? - PullRequest
1 голос
/ 25 февраля 2020

Поэтому у меня есть вопрос, касающийся зависимостей useEffect

Это из документов реагирования:

useEffect(() => {
  document.title = `You clicked ${count} times`;
}, [count]); // Only re-run the effect if count changes

Что это означает точно, отслеживает ли React переменную count и его значение и реагирует на изменение значения, или React отслеживает первый элемент в массиве и его значение.

Что я имею в виду под этим? Позвольте мне объяснить больше. Так что если у нас есть что-то вроде [name] в качестве зависимостей. В момент оценки массив может иметь результат ['Bob'] или ['Steve']. Очевидно, что это изменение, и useEffect будет перерисовывать компонент. Но как это проверить?

Отслеживает ли name или отслеживает dependencyArray[0]. Если мы посмотрим в предыдущем примере, оба из них приведут к true, name и first element оба изменили свои значения с 'Bob' на 'Steve'. Но как это на самом деле работает?

В настоящее время в моем коде я использую что-то вроде этого [employees[selectedEmployee].name], где selectedEmployee - это что-то нажимаемое в пользовательском интерфейсе, и оно становится 'Bob' или 'Steve'

ex:

const employees = {
   Bob: {
      name: 'Bob'
   },
   Steve: {
      name: 'Steve'
   }
}

Это означает, что в конце, при оценке, массив зависимостей будет по-прежнему иметь значение ['Bob'] -> ['Steve'], и если React оценивает dependencyArray[0] тогда это явно изменилось, и компонент должен повторно отображаться, но если он отслеживает ссылку, то я полностью изменяю ссылку, и это может вызвать проблемы.

Так какой же правильный подход? Могу ли я использовать динамические c свойства, такие как employees[selectedEmployee].name, в качестве зависимости?

...