RTK:无法重新获取尚未启动的查询

问题描述 投票:0回答:2

我的应用程序的许多地方的减速板出现很多错误,说:

Cannot refetch a query that has not been started yet.

我环顾四周,没有找到重现的方法。 我假设错误是由 RTK

refetch()
或给查询的
pollingInterval
引起的。

我不知道是否有人有同样的问题,或者这是否是一个已知问题。

由于我真的不知道是什么原因导致了问题,而且错误是最近才开始出现的,我想这可能是由 RTK 或其他原因引起的。

我还想这可能是由一些

useEffects
造成的,就像这样:

useEffect(() => {
    if (user?.team !== userTeamRef.current) {
        refetch();
        userTeamRef.current = user?.team === undefined ? null : user.team;
    }
}, [user?.team, refetch]);

更新:

所以我能够重现该错误:

    const [joinTeam ] = useJoinTeamMutation();
    const { refetch } = useGetTeam(slugName);

    const onClick = () => {
        leaveTeam().then((res: any) => {
            if (!res.error) {
                refetch();
            }
        });
    };

当使用 Promise 调用重新获取时,它会抛出错误。

reactjs react-redux redux-toolkit rtk-query
2个回答
3
投票

重新获取只能对已经获取的数据进行,如果没有初始化则不起作用。所以你可能想尝试以下方法:

const { refetch, isUninitialized } = useGetTeam(slugName);
    
const refetchTeam = useCallback(() => {
  if (!isUninitialized) {
    refetch();
  }
}, [isUninitialized, refetch]);
    
const onClick = () => {
  leaveTeam().then((res: any) => {
    if (!res.error) {
      refetchTeam();
    }
  });
};


0
投票

调用

refetch()
的另一种方法是使相应的标签无效。例如

    const onClick = () => {
        leaveTeam().then((res: any) => {
            if (!res.error) {
               dispatch(yourApi.util.invalidateTags([{type:'team', slugName}]));
            }
        });
    };

当然前提是你的API提供了相应的标签,例如:

getTeam: builder.query<Team, string>({ 
   query: (slugName) => '.....', 
   providesTags: (_result, _error, slugName) => [{type: 'team', slugName}]
})
© www.soinside.com 2019 - 2024. All rights reserved.