【问题标题】:Is it possible to only run useEffect on props change, but not state change?是否可以仅在道具更改时运行 useEffect 而不是状态更改?
【发布时间】:2019-03-21 16:18:08
【问题描述】:

正如标题所示,我试图让 useEffect 仅在 props 更改时运行,而不是在我更改状态时运行(或者特别是在我运行 useState 时它不应该运行)。

原因是我有用户输入,默认为存储在数据库中的输入,但在挂载时获取,但如果 props 发生变化,则可以更改。

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

  setChosenTags(userTags);
});

有可能吗?谢谢。

【问题讨论】:

    标签: reactjs


    【解决方案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]);
    
      // ...
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 2014-07-14
      • 1970-01-01
      • 2023-03-27
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多