Javascript 反应状态对象';axios请求中的s值为空
我正在使用一个axiosget请求来加载数据并将其保存到某个对象中。 成功加载数据后,我会执行相同的请求,并希望在请求中使用已加载的数据。意思是:Javascript 反应状态对象';axios请求中的s值为空,javascript,reactjs,caching,axios,react-hooks,Javascript,Reactjs,Caching,Axios,React Hooks,我正在使用一个axiosget请求来加载数据并将其保存到某个对象中。 成功加载数据后,我会执行相同的请求,并希望在请求中使用已加载的数据。意思是: const [data, setData] = useState({}) axios.get('...').then(response => { if (data) { // Do Something } else { setData(response.data); } } 问题是,当
const [data, setData] = useState({})
axios.get('...').then(response => {
if (data) {
// Do Something
} else {
setData(response.data);
}
}
问题是,当我输入if
语句时,对象data
总是一个空对象。我需要data
作为以前返回的响应的数据
调试问题时,在输入请求之前,
data
中的数据存在,但在输入时,中的数据为空。我是一个新手,但如果有一个简单的例子涉及到我在这里写的代码,那将是一个巨大的帮助。谢谢 最初,您的数据
是{}
,这是一个真实的值,这就是为什么它会出现在if
语句中。特别是对于这种类型的副作用,您试图实现的是一个名为useffect
的钩子
当数据
发生如下变化时,您可以触发一个函数:
useEffect(() => {
console.log('data changed')
}, [data]);
建议阅读
基于此,您还需要修改设置数据
状态的方式,请参见我的建议:
axios.get('...').then(response => {
setData(response.data);
}
通过这种方式,您在设置数据后触发操作。问题是,我想知道以前是否检索过信息,并在请求中使用它。我需要它,因为我在一定的时间范围内得到了很多信息,每隔几秒钟我只需要增量信息,而不是全部信息。useEffect在这里仍然有用吗?@user10000也许您可以引入一个标志,作为const[hasrecreted,sethasrecreted]=useState(false)
,并在useEffect
中设置为sethasrecreted(true)
。因此,如果数据已经到达中,您可以使用if
语句检查hasrecrieved
的值。这有帮助吗?我想这样做,但我需要能够访问axios请求响应中的数据。由于某种奇怪的原因,当在外部调试时,数据就在那里,但在输入时数据
是空的。是否有方法将数据
传递到。然后
?@user10000是否有可以检查整个代码的codesandbox?谢谢实际上我没有,但我已经通过保留一个var
来解决这个问题,该var将保存以前的数据。我感谢你的帮助:)