【发布时间】:2020-11-25 16:15:31
【问题描述】:
肯定有 lot of questions 和关于 setState 的答案,我已经尝试查看它们,但没有找到与我的非常相似的问题(或解决方案)有用。仍然很有可能有一个可以处理这个问题,如果是这样,请指出,并为重复道歉。
这是来自功能性 React 组件的相关代码:
const [ state, setState ] = useState({})
useEffect(data => {
const getFromServer = axios.get('http://localhost:3030/poolInfo')
.then(res => {
console.log("RES.DATA LOOKS LIKE THIS:, ", res.data);
setState(res.data); // I also tried setState({...res.data})
console.log("IN AXIOS, STATE IS NOW: ", state);
})
.catch (err => console.error("YO YOU GOT AN ERROR IN AXIOS ", err))
},[])
下面是上面两个console.logs的结果:
RES.DATA LOOKS LIKE THIS:, Object { balance: 1000000000000000000, feeAndSplit: Array [500, 20] }
IN AXIOS, STATE IS NOW: Object { }
第一个console.log 显示的数据完全符合我的预期。 (使用 Postman 访问相同的 API 也会返回相同的数据。)我在字面上调用 setState 上的变量是一秒钟前刚刚在日志中有数据的变量,然后噗!现在它是一个空对象。
我认为console.log 本身可能对res.data 做了一些奇怪的事情,所以我也尝试注释掉第一个console.log,但仍然得到相同的结果。
我想知道这是否与在useEffect 中设置状态有关,但如果是这样,我就不知所措了。 (比如this的答案似乎表明只要在useEffect的末尾传入一个空数组,一切都应该没问题。)
res.data 发生了什么事,和/或如何设置它的状态?
谢谢!
【问题讨论】:
-
setState 是异步方法,您在设置之后打印值。你可以根据状态值做一些任务,你会看到 ui 的变化。
-
我正在执行任务,但没有看到 UI 的变化。我没有把那部分代码放进去,因为我一开始并不认为它是相关的。我想我可能搞错了这个问题。
标签: reactjs setstate use-effect