是否可以仅在道具更改上运行useEffect,而不能在状态更改上运行useEffect?

时间:2019-03-21 16:18:08

标签: reactjs

正如标题所示,我试图使useEffect仅在props更改时运行,但如果我更改状态(或者在我运行useState时不应该运行),则不会。

之所以这样,是因为我有用户输入,默认为存储在数据库中的输入,但是是在安装时获取的,但是如果props改变,CAN就会改变。

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

  setChosenTags(userTags);
});

有可能吗?谢谢。

1 个答案:

答案 0 :(得分:6)

作为useEffect的第一个参数给出的函数将在每次更改为第二个参数给出的数组中的任何元素时运行,因此您可以将props放入此数组中,以使它在任何道具改变。

示例

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]);

  // ...
}