Javascript 反应状态对象';axios请求中的s值为空

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); } } 问题是,当

我正在使用一个axiosget请求来加载数据并将其保存到某个对象中。 成功加载数据后,我会执行相同的请求,并希望在请求中使用已加载的数据。意思是:

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将保存以前的数据。我感谢你的帮助:)