我使用uswSWR来处理用户身份验证:
export function useAuthenticatedUser() {
const { data, error, isLoading, mutate } = useSWR("user",
UserApi.getAuthenticatedUser,
{
shouldRetryOnError(err) {
return !(err instanceof UnauthorizedError)
},
}
);
return {
user: data,
userLoading: isLoading,
userLoadingError: error,
mutateUser: mutate,
}
}
由于SWR的自动重新验证,当浏览器窗口或选项卡获得焦点时,将再次获取此用户。
问题:注销后重新验证不起作用:
const { mutateUser } = useAuthenticatedUser();
async function logout() {
try {
await UserApi.logout();
mutateUser(undefined);
} catch (error) {
console.error(error);
alert(error);
}
}
此记录显示了实际问题。请注意,获得焦点的窗口在登录后重新生效,但在注销后不生效。
1条答案
按热度按时间kb5ga3dv1#
问题是,如果用户没有登录,我不会返回null。如果我使用
null
而不是undefined
进行修改,则注销会正确传播。现在
mutate
接受null
: