我在Next.js项目中使用了react-query和react-error-boundary库。我注意到,如果我在QueryErrorResetBoundary组件中使用reset函数,它会触发重新呈现。然而,当我不使用React Query的reset而使用resetErrorBoundary时,回退屏幕消失了。你能解释一下为什么会这样吗?
/ /ErrorBoundaryLayout
function ErrorBoundaryLayout({children}) {
return (
<QueryErrorResetBoundary>
{({ reset }) => (
<ErrorBoundary
// onReset={reset} I added comments
fallbackRender={({ error, resetErrorBoundary }) => {
return (
<ErrorFallback
resetErrorBoundary={resetErrorBoundary}
/>
);
}}
>
{children}
</ErrorBoundary>
)}
</QueryErrorResetBoundary>
);
}
//ErrorFallback
unction ErrorFallback({resetErrorBoundary}) {
const router = useRouter();
// this doesn't work
const navigateToBack = () => {
resetErrorBoundary();
router.back();
};
// this way works
const errorLocation = useRef(router.asPath);
useEffect(() => {
if (errorLocation.current !== router.asPath) {
resetErrorBoundary();
}
}, [router.asPath]);
return (
<Button onClick={router.back}/>
);
}
1条答案
按热度按时间rseugnpd1#
QueryErrorResetBoundary
中的reset
确保查询在下次挂载时重新获取。流程为:resetErrorBoundary
重置边界本身,这将卸载边界并再次显示组件reset
重置查询,以便它可以再次获取。