【问题标题】:React-query - refetch data when component mountsReact-query - 组件挂载时重新获取数据
【发布时间】:2021-12-08 05:24:37
【问题描述】:

有没有办法在组件挂载时重新获取数据?目前使用 react-router 如果我在我的应用程序中导航,它会获取一次数据,然后如果我离开并返回数据仍然是旧数据而不是新请求?

我没有在 useEffect 中封装我的 fetch 调用。

const fetchInfo = async () => {
        const res = await fetch(`/api/${id}`);
        return res.json();
    };

    const { data, status } = useQuery('tableInfo', fetchInfo, {
        staleTime: 5000,
    });

用作:

{status === 'error' && (
                <div className="mt-5">Error fetching data!</div>
            )}
            {status === 'loading' && (
                <div className="mt-5">Loading data ...
                   
                </div>
            )}
            {status === 'success' && (
                <div className="mt-5">
                    <p>Result will be here</p>
                </div>
            )}

【问题讨论】:

标签: javascript reactjs


【解决方案1】:

通过您的设置,如果您获取数据,移动到另一个视图并返回(至少 5 秒后),它将重新获取 - 如果您导航并在这 5 秒之前返回 - 它不应该。

如果您认为数据不会随着时间的推移(或者无论如何都不会很快)过时​​,如果您想防止重新获取,请将 staleTime 设置为超过 5 秒(最多 Infinity

如果您想在每次导航到该视图时重新获取数据 - 根本不要设置 staleTime

【讨论】:

  • 所以我希望在组件挂载和刷新组件时调用 fetch 数据?
  • react-query 中,默认情况下在组件挂载后重新获取数据(也就是在获取后立即变为“陈旧”)。要更改它并告诉react-query您的数据不会那么快过时(然后不会在每次组件渲染/视图更改时重新获取它),您应该定义staleTime
  • 那么如果我指定staletime,到什么数字?
  • 这实际上取决于您的数据-如果您不希望它在用户会话生命周期内发生变化-您甚至可以选择Infinity(然后您必须手动改变/重新获取它) .否则,将其设置为防止过度获取的数量(再次,取决于数据 - 它可能是 1 分钟和 15 分钟)
  • 虽然我认为这与 react-router 而不是 react-query 有关
猜你喜欢
  • 2019-04-10
  • 2018-09-29
  • 1970-01-01
  • 2017-12-26
  • 2021-04-25
  • 2020-01-09
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多