【发布时间】:2020-05-19 10:19:30
【问题描述】:
我有两个 useEffect-s。一个用于从 api 获取数据并将其保存在 state 中,第二个仅调用一次并开始监听 websocket 事件。 在 websocket 事件处理程序中,我记录了获取的数据,但它始终具有默认值。 即使获取数据成功完成并在 UI 上绘制列表,列表的值始终为空 - []。
const [list, setList] = useState([]);
useEffect(() => {
axios.get("https://sample.api.com/get/list")
.then(res => {
setList(res.data);
});
}, [window.location.pathname.split('/')[2]]);
useEffect(() => {
webSocket.on('messageRecieved', (message) => {
console.log(list);
});
}, []);
【问题讨论】:
-
是的,事件里面的
console.log会一直显示初始值,当你收到一个事件你想做什么?如果您只想记录列表以查看它是否已从 fetch 更新,请在组件主体内放置console.log或检查反应开发工具 -
问题是初始值,在 setList() 调用之后,我想用列表变量而不是初始值来检索新分配的值。但是 Draeken 的答案看起来很有希望,我明天会检查它
标签: reactjs setstate use-effect