为什么状态变量的值没有被更新?

时间:2021-04-27 19:34:56

标签: javascript reactjs

我有一个带有 displayProfileID 函数的函数组件:

const [comments, setComments] = useState([]);
const [triggerUpdate, setTriggerUpdate] = useState(Math.random());


const displayProfileID = id => {
...
...

  try {
    axios.get(url).then(resp => {
      if (resp.data.status === "success") {
      ...
      ...
      const obj = resp.data.comments; // <-- receiving an array of objects
      setComments(obj);  // <-- changing state value
      setTriggerUpdate(Math.random()); // <-- forcing update of state variables
      console.log(comments);  //  <-- change isn't reflected ???
    }
  });
} catch (e) {
  console.log(e);
}

};

这是我唯一遇到问题的功能。尽管状态变量没有改变 使用 Math.random() 触发组件重新渲染。

感谢您的指点。

1 个答案:

答案 0 :(得分:1)

setState 不是同步的。 console.log 会在值发生更改之前记录该值(或者,更准确地说,它没有更改,也不会更改,您将获得一个新的——可能是下一次渲染)。

如果您正在呈现内容,那么它应该在您调用 setState 后更新。 setTrigger 事情似乎没有必要。

当您说“我的组件中有函数”时,在哪里?这是一个函数组件?钩子在函数组件中工作,而不是类组件。所以希望这段代码在一个功能组件中。