程序问答   发布时间:2022-05-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何从 contextApi 为 nextjs 中的一组特定路由提供上下文并通过链接保留路由状态?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何从 contextApi 为 nextjs 中的一组特定路由提供上下文并通过链接保留路由状态??

开发过程中遇到如何从 contextApi 为 nextjs 中的一组特定路由提供上下文并通过链接保留路由状态?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何从 contextApi 为 nextjs 中的一组特定路由提供上下文并通过链接保留路由状态?的解决方法建议,希望对你解决如何从 contextApi 为 nextjs 中的一组特定路由提供上下文并通过链接保留路由状态?有所启发或帮助;

我正在将 contextAPI 与 nextJs 一起使用,但在为某些路由提供上下文时遇到了一些问题。我能够使上下文仅可用于几条路由,但是当我通过链接从一个路由转换到另一个路由时,我最终会丢失应用程序的状态。

我的 pages 文件夹中有三个文件: index.tsx@H_874_6@, Dashboard/index.tsx@H_874_6@ 和 SignIn/index.tsx@H_874_6@。

如果我在文件 Dashboard/index.tsx@H_874_6@ 和 SignIn/index.tsx@H_874_6@ 中导入提供程序并通过按下 next/link@H_874_6@ 中的链接组件从一个页面转到另一页面,则整个状态将设置回初始状态。

Dashboard/index.tsx@H_874_6@ 文件的内容

    import React from 'react';
    import Dashboard from '../../app/vIEws/Dashboard';
    import { authprovIDer } from '../../contexts/auth';
    const Index: React.FC = () => (
      <authprovIDer>
        <Dashboard />
      </authprovIDer>
    );
    export default Index;
@H_874_6@

这是 SignIn/index.tsx@H_874_6@ 文件的竞争:

    import React from 'react';
    import SignIn from '../../app/vIEws/SignIn';
    import { authprovIDer } from '../../contexts/auth';
    const Index: React.FC = () => (
      <authprovIDer>
        <SignIn />
      </authprovIDer>
    );
    export default Index;
@H_874_6@

vIEws 文件夹是我创建将要渲染的组件的地方。 文件 vIEws/SignIn/index.tsx@H_874_6@ 的内容是:

    import React,{ useContext } from 'react';
    import link from 'next/link';
    import { AuthContext } from '../../../contexts/auth';
    const SignIn: React.FC = () => {
      const { signed,signIn } = useContext(AuthContext);
      async function handleSignIn() {
        signIn();
      }
      return (
        <div>
          <link href="Dashboard">Go BACk to Dashboard</link>
          <button onClick={handleSignIn}>Click me</button>
        </div>
      );
    };
    export default SignIn;
@H_874_6@

文件vIEws/Dashboard/index.tsx@H_874_6@的内容是:

    import React,{ useContext } from 'react';
    import link from 'next/link';
    import { AuthContext } from '../../../contexts/auth';
    const Dashboard: React.FC = () => {
      const { signed,signIn } = useContext(AuthContext);
      async function handleSignIn() {
        signIn();
      }
      return (
        <div>
          <link href="SignIn">Go BACk to sign in page</link>
          <button onClick={handleSignIn}>Click me</button>
        </div>
      );
    };
    export default Dashboard;
@H_874_6@

我可以访问 /Dashboard@H_874_6@ 和 /SignIn@H_874_6@ 中的上下文,但是当我按下链接时,状态又回到最初的状态。我发现整个提供程序都被重新渲染,因此新状态成为初始状态,但我无法以“最佳实践方式”解决这个问题。

如果我将提供者放在 _app.tsx@H_874_6@ 中,我可以在页面之间转换时保持状态,但我最终也会将此状态提供给 /@H_874_6@ 路由,这是我试图避免的。

我可以通过执行以下操作来解决这个问题,但它似乎对我来说并不是最好的解决方案。

我从 Pages/SignIn/index.tsx@H_874_6@ 和 Pages/Dashboard/index.tsx@H_874_6@ 中删除了提供程序,并为 _app.tsx@H_874_6@ 文件使用了以下代码段:

    import React from 'react';
    import { AppProps } from 'next/app';
    import { useRouter } from 'next/router';
    import { authprovIDer } from '../contexts/auth';
    const App: React.FC<AppProps> = ({ Component,pageProps }) => {
      const router = useRouter();
      const authprovIDerRoutes = ['/SignIn','/Dashboard'];
      return (
        <>
          {authprovIDerRoutes.includes(router.pathName) ? (
            <authprovIDer>
              <Component {...pageProps} />
            </authprovIDer>
          ) : <Component {...pageProps} />}
        </>
      );
    };
    export default App;
@H_874_6@

有人有更好的解决方案吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的如何从 contextApi 为 nextjs 中的一组特定路由提供上下文并通过链接保留路由状态?全部内容,希望文章能够帮你解决如何从 contextApi 为 nextjs 中的一组特定路由提供上下文并通过链接保留路由状态?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。