next.js reset函数在React Query中的作用是什么?

bis0qfac  于 2023-10-18  发布在  React
关注(0)|答案(1)|浏览(109)

我在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}/>
    );
}
rseugnpd

rseugnpd1#

QueryErrorResetBoundary中的reset确保查询在下次挂载时重新获取。流程为:

  • 查询获取,失败
  • query抛出错误到最近的错误边界,然后停止获取,直到调用reset。
  • 错误边界显示回退内容
  • 用户点击一个按钮,这将:
  • 使用resetErrorBoundary重置边界本身,这将卸载边界并再次显示组件
  • reset重置查询,以便它可以再次获取。
  • 然后,组件再次安装,您应该会看到一个加载微调器...

相关问题