我有一个带有 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()
触发组件重新渲染。
感谢您的指点。
答案 0 :(得分:1)
setState
不是同步的。 console.log
会在值发生更改之前记录该值(或者,更准确地说,它没有更改,也不会更改,您将获得一个新的——可能是下一次渲染)。
如果您正在呈现内容,那么它应该在您调用 setState
后更新。 setTrigger
事情似乎没有必要。
当您说“我的组件中有函数”时,在哪里?这是一个函数组件?钩子在函数组件中工作,而不是类组件。所以希望这段代码在一个功能组件中。