首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setTimeout React挂钩中的API调用显示过时的值。

setTimeout React挂钩中的API调用显示过时的值。
EN

Stack Overflow用户
提问于 2020-07-15 04:35:49
回答 3查看 753关注 0票数 0

我有一个自定义的钩子,可以每隔5秒调用一次API。下面的代码可以工作,但res console.log每次都是相同的值。我希望它能显示倒计时。我已经验证了API是否正常工作-如果我以任何其他方式点击它,我每次都会看到一个不同的值。

我在useFetch调用中使用了use-http库。

代码语言:javascript
复制
const useSession = () => {

  const request = useFetch('', { headers: getHeaders() })

  const checkTime = () => {
    console.log('calling')
    request.get('/api/users/session/status/')
      .then(res => {
        console.log('res: ', res)
        // update state here
      })
      .catch(err => console.log(err))
  }

  useEffect(() => {
    const timeout = setTimeout(() => checkTime(), 5000)
    return () => clearTimeout(timeout)
  }, [request, checkTime])

}
EN

回答 3

Stack Overflow用户

发布于 2020-07-15 05:14:16

尝试在useEffect中使用checkTime。

票数 0
EN

Stack Overflow用户

发布于 2020-07-15 05:23:21

试试这个:

代码语言:javascript
复制
import React, { useEffect } from 'react';

export default function App() {
  useEffect(() => {
    (async function getStatus() {
      const res = await fetch('https://jsonplaceholder.typicode.com/users');
      const json = await res.json();

      setTimeout(getStatus, 5000);
      console.log('ran', json);
    })();
  }, []);
  return <div>See console</div>;
}

现场演示链接:https://stackblitz.com/edit/react-ixhjtb

票数 0
EN

Stack Overflow用户

发布于 2020-07-15 21:59:06

浏览器正在缓存请求--最后我可以通过添加一个时间戳作为URL参数来解决这个问题:

代码语言:javascript
复制
const timestamp = new Date()
request.get(`/api/users/session/status/?=${timestamp.getTime()}`)

我确实尝试过修改与缓存相关的请求头,但似乎都没有任何效果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62903611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档