Можно ли запускать useEffect только при изменении реквизита, но не при изменении состояния?

как следует из названия, я пытаюсь сделать так, чтобы useEffect запускался только при изменении реквизита, но не при изменении состояния (или, в частности, он не должен запускаться при запуске useState).

Причина этого в том, что у меня есть пользовательские входные данные, которые по умолчанию являются входными данными, хранящимися в базе данных, но извлекаются при монтировании, но МОГУТ измениться при изменении реквизитов.

useEffect(() => {
  let userTags = [];
  props.question.tagVotes.forEach((tagVote) => {
    if (_.includes(tagVote.users, props.user.username)) {
      userTags.push(tagVote.tag);
    }
  });

  setChosenTags(userTags);
});

Является ли это возможным? Спасибо.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
8
0
6 701
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Функция, указанная в качестве первого аргумента для useEffect, будет запускаться каждый раз, когда любой из элементов в массиве, указанном в качестве второго аргумента, изменяется, поэтому вы можете поместить реквизиты в этот массив, чтобы он снова запускался при изменении любого из реквизитов.

Пример

function App(props) {
  useEffect(() => {
    let userTags = [];

    props.question.tagVotes.forEach(tagVote => {
      if (_.includes(tagVote.users, props.user.username)) {
        userTags.push(tagVote.tag);
      }
    });

    setChosenTags(userTags);
  }, [props.question]);

  // ...
}

Другие вопросы по теме