Next.js 不会在 _app.tsx 中传递用户属性

Posted

技术标签:

【中文标题】Next.js 不会在 _app.tsx 中传递用户属性【英文标题】:Next.js won't pass user prop in _app.tsx 【发布时间】:2021-08-27 09:20:05 【问题描述】:

我想将用户对象传递给我的 next.js 应用程序中的所有页面。我没有将任何内容写入控制台或使用以下代码作为道具传递。放大部分似乎正在工作。

// _app.tsx

import type  AppProps  from "next/app"
import type  GetServerSideProps, GetServerSidePropsContext  from "next"
import Amplify,  Auth, withs-s-rContext  from "aws-amplify"
import  AmplifyAuthenticator, AmplifySignIn  from "@aws-amplify/ui-react"
import  config  from "../amplify.config"

Amplify.configure( ...config, s-s-r: true )

MyApp.getServerSideProps = async (context: GetServerSidePropsContext) => 
    const appProps = await getServerSideProps(context)

    return  ...appProps 


export const getServerSideProps: GetServerSideProps = async (ctx) => 
    const auth = withs-s-rContext(ctx).Auth as typeof Auth

    let user: any
    try 
        user = await auth.currentAuthenticatedUser()
        console.log("user is authenticated:", user)
        return  props:  user: user  
     catch (err) 
        console.log("error: no authenticated user")
    


export default function MyApp( Component, pageProps : AppProps) 
    return (
        <AmplifyAuthenticator>
            <AmplifySignIn hideSignUp usernameAlias="email" slot="sign-in" />
            <Component ...pageProps />
        </AmplifyAuthenticator>
    )

【问题讨论】:

Next.js 中的自定义 _app 不支持 getServerSideProps 和 getStaticProps。尝试改用 getInitiapProps。 我遇到了类似的问题。 getInitialProps 将起作用,但会导致您的应用程序在服务器端呈现每个页面。 nextjs.org/docs/advanced-features/custom-app#caveats 【参考方案1】:

请阅读next.js的这部分文档

https://nextjs.org/docs/advanced-features/custom-app

应用目前不支持 Next.js 数据获取方法,例如 getStaticProps 或 getServerSideProps。

因此,您必须在 _app.js 中进行一些更改才能实现这一目标。

您可以在这篇文章中找到解决方案: Next.js: Reduce data fetching and share data between pages

【讨论】:

以上是关于Next.js 不会在 _app.tsx 中传递用户属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Next.js 中将路径名从 _document 传递到 _app

NextJS _app.tsx Component 和 pageProps 应该是啥 TypeScript 类型?

Next.js - 如何将 id 从查询传递到 getInitialProps 函数

如果在 className 中使用变量,则 React/Next.js 中的 Tailwind 不会为 text-*xl 类生成 css

如何在 Next.js 中设置全局上下文而不会出现“文本内容不匹配”错误?

如何在 Next.js 中将 CSS 模块中的 CSS 作为 prop 传递