关于setState
,肯定有很多问题和答案,我也试过去看,但还没有发现一个与我的问题(或解决方案)非常相似的问题(或解决方案)有用。仍然很有可能有人在处理这个问题,如果是的话,请指出,并为重复的内容道歉。
以下是功能组件的相关代码:
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.log的结果:
RES.DATA如下所示:,对象{balance:10000000000000000,feeAndSplit:Array[500,20]}
在AXIOS中,状态现在是:对象{}
第一个
console.log
显示的数据与我预期的完全相同。(与Postman使用相同的API也会返回相同的数据。)我调用setState
,调用的变量与一秒钟前日志中刚包含数据的变量完全相同,然后poof!现在它是一个空的对象。
我想可能是
console.log
本身对res.data
做了一些奇怪的事情,所以我也试着注释了第一个console.log
,但仍然得到了相同的结果。
我想知道这是否与在
use效应
中设置状态有关,但是如果有的话,我就不知所措了。例如,这个答案似乎表明,只要在use效应
的末尾传入一个空数组,一切都应该很好。)
res.data
发生了什么,和/或如何设置状态?
谢谢
一切正常,只是你把日志语句放在了一个无用的地方。
state
是一个本地常量。它永远不会改变,这不是setState试图做的。调用setState的目的是告诉响应重新呈现组件。当组件重新渲染时,将创建一个新的本地const,它将具有该新值。新渲染中的代码可以访问该新值,但旧渲染中的代码仍然引用以前的值。
因此,如果要验证是否使用新值重新渲染,请将log语句放在组件主体中,以便在渲染时可以记录:
const [ state, setState ] = useState({})
console.log("Rendering with: ", state);
useEffect(data => {
const getFromServer = axios.get('http://localhost:3030/poolInfo')
.then(res => {
console.log("RES.DATA LOOKS LIKE THIS:, ", res.data);
setState(res.data);
})
.catch (err => console.error("YO YOU GOT AN ERROR IN AXIOS ", err))
},[])
问题内容: 我处于状态的对象数组: 我需要能够基于id属性搜索items数组,然后更新对象属性。 我可以使用id参数通过数组或在数组上获取对象。 我遇到的麻烦是更新数组,然后更新状态而不会发生突变。 此时,我有一个匹配的对象,可以使用对象传播来更新它的属性: 我的问题是我该如何更新状态,以使其覆盖初始查找操作返回的对象? 问题答案: 您的更新功能如下所示 你这样使用它 毛吧? 如果您继续以这种方式
我有一个处理程序,在输入字段发生变化时触发。但是,当我将状态日志记录到控制台resData是'未定义'?这是不可能的,因为console.log(身体)确实返回结果。
我想知道是否有一种方法可以使用useState()更新React中的嵌套对象状态
本文向大家介绍hibernate 对象有哪些状态?相关面试题,主要包含被问及hibernate 对象有哪些状态?时的应答技巧和注意事项,需要的朋友参考一下 临时/瞬时状态:直接 new 出来的对象,该对象还没被持久化(没保存在数据库中),不受 Session 管理。 持久化状态:当调用 Session 的 save/saveOrupdate/get/load/list 等方法的时候,对象就是持久化
问题内容: 对于我正在使用的插件,我必须具有如下所示的状态: 我如何在不设置其余访问权限的情况下设置hospital_id的状态? 这似乎删除了除了hospital_id之外的所有内容: 问题答案: 您有几种选择: 借助ECMA6,您可以使用对象传播建议()创建具有更新属性的对象的副本。 您可以在对象()上使用本机分配功能 或为最短的版本和原子更新: 还有一个选项是更新插件: 我建议使用第一个。
对于我正在使用的插件,我必须具有如下状态: 如何在不设置其余访问权限的情况下设置hospital_id状态? 这似乎删除了一切,但hospital_id: