Reactjs React应用程序中的Redux vs HOC与身份验证会话

Reactjs React应用程序中的Redux vs HOC与身份验证会话,reactjs,redux,next.js,high-order-component,next-auth,Reactjs,Redux,Next.js,High Order Component,Next Auth,我在framework Next.js中安装了React应用程序(但framework并不重要),并实现了身份验证 当前应用程序在第一次加载后通过API调用获取用户会话数据(我正在为此使用next auth)。这导致加载和会话获取之间有一个间隔,这会导致用户在整个应用程序中看到加载微调器的小间隔 我希望通过实现SSR(服务器端渲染)来缓解这一问题,在SSR中,我可以使用会话数据补充初始响应 这可以通过组件中的getServerProps方法在Next.js中轻松实现,但问题是我需要在我拥有的每个

我在framework Next.js中安装了React应用程序(但framework并不重要),并实现了身份验证

当前应用程序在第一次加载后通过API调用获取用户会话数据(我正在为此使用
next auth
)。这导致加载和会话获取之间有一个间隔,这会导致用户在整个应用程序中看到加载微调器的小间隔

我希望通过实现SSR(服务器端渲染)来缓解这一问题,在SSR中,我可以使用会话数据补充初始响应

这可以通过组件中的
getServerProps
方法在Next.js中轻松实现,但问题是我需要在我拥有的每个页面上实现这个方法

这就是为什么我在寻找一种方法,使会话状态在整个应用程序中处于全局状态,这样每个页面(组件)都可以访问此会话数据

我的主要问题是,我应该在实现
getServerProps
的地方使用HOC包装器来接收会话数据,还是应该使用Redux存储并通过相同的方法使用该存储

我不确定HOC是否仍然被广泛使用,或者它们只是现在被弃用了

我不想在Next.js custom
\u app.js
文件中实现
getInitialProps
,因为这将禁用静态生成页面的功能,并且会话将在每个页面中可用。我计划应用程序只需要大约一半的页面中的会话数据


因此,我应该使用HOC还是只需输入元素redux存储就可以了?

您可以执行以下操作:

创建一个身份验证,将身份验证数据传递给组件。例如:

interface ContextProps {
  authenticated: boolean;
  handleLogin: () => void;
  handleLogout: () => void;
}

const authContext = createContext<Partial<ContextProps>>(undefined);
将你的
\u app.js:

...
<AuthProvider>
   <Component pageProps={pageProps} />
</AuthProvider>
...
。。。
...
访问相关页面:

const Page = () => {
  const { authenticated } = useAuth();

  if (!authenticated) {
    return (
      <>
        Not authenticated
      </>
    );
  }
  ...
const Page=()=>{
const{authenticated}=useAuth();
如果(!已验证){
返回(
未经认证
);
}
...

然后,您可以使用相关组件

您可以执行以下操作:

创建将身份验证数据向下传递到组件的身份验证。例如:

interface ContextProps {
  authenticated: boolean;
  handleLogin: () => void;
  handleLogout: () => void;
}

const authContext = createContext<Partial<ContextProps>>(undefined);
将你的
\u app.js:

...
<AuthProvider>
   <Component pageProps={pageProps} />
</AuthProvider>
...
。。。
...
访问相关页面:

const Page = () => {
  const { authenticated } = useAuth();

  if (!authenticated) {
    return (
      <>
        Not authenticated
      </>
    );
  }
  ...
const Page=()=>{
const{authenticated}=useAuth();
如果(!已验证){
返回(
未经认证
);
}
...

然后您可以在相关组件中使用

上下文很酷,我不知道它们,但这并不是我问题的真正解决方案,因为我无法在上下文初始化中使用
getServerSideProps
从服务器检索会话。您不需要使用
getServerSideProps
-在正如我所说的,你的钩子的
useffect
。我不想使用API调用。它们会导致延迟,这意味着我需要应用程序中的微调器(在依赖于会话的每个组件上,或者整个应用程序上)上下文很酷,我不知道它们,但这并不能真正解决我的问题,因为我不能在上下文初始化中使用
getServerSideProps
从服务器检索会话。你不需要使用
getServerSideProps
-如我所说,在钩子的
useffect
中进行API调用。我不想t使用API调用。它们会导致延迟,这意味着我需要应用程序中的微调器(依赖于会话或整个应用程序的每个组件)