在 Next.js 13 中使用标记为“use client”的提供程序包装整个应用程序

2024-04-30

我正在 Next.js 中开发一个小型应用程序,但我还没有完全理解客户端与服务器端渲染的情况。

我一直在工作这个伟大的指南 https://www.misha.wtf/blog/supabase-auth-next-13-pkce关于使用 Supabase 设置 NextJS。

根据Next.js 文档 https://nextjs.org/docs/getting-started/react-essentials#the-use-client-directive:

一旦在文件中定义了“use client”,导入到其中的所有其他模块(包括子组件)都被视为客户端包的一部分

所以如果我使用的是AuthProvider包装应用程序(如指南中所示),但是AuthProvider被标记"use client",我想知道是否{children}布局中的内容也自动成为客户端捆绑包的一部分。

我的猜测是“不”,因为他们不是AuthProvider,就在 ReactElements (或其他东西)附近,但我很感激有人为我确认和澄清术语。

// AuthProvider.tsx

"use client";

...

// layout.tsx

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html lang="en">
      <body>
        <AuthProvider>
            {children}
        </AuthProvider>
      </body>
    </html>
  );
}

Thanks!


您不能在客户端组件主体中调用服务器组件,但将其作为其一部分传递是完全可以的。props, children是一种可能性,正如您可以在doc https://nextjs.org/docs/getting-started/react-essentials#nesting-server-components-inside-client-components.

例如,在下面的代码中,因为所有内容都是直接在客户端组件主体中调用的,所以只能有客户端组件(注意注释):

'use client'
 
// This pattern will **not** work!
// You cannot import a Server Component into a Client Component.
import ExampleServerComponent from './example-server-component'
 
export default function ExampleClientComponent() {
  const [count, setCount] = useState(0)
 
  return (
    <>
      <button onClick={() => setCount(count + 1)}>{count}</button>
 
      <ExampleServerComponent />
    </>
  )
}

但是,如上所述,您可以将服务器组件传递给客户端组件,作为其组件的一部分。props:

'use client'
 
import { useState } from 'react'
 
export default function ExampleClientComponent({ children }) {
  const [count, setCount] = useState(0)
 
  return (
    <>
      <button onClick={() => setCount(count + 1)}>{count}</button>
 
      {children}
    </>
  )
}
// This pattern works:
// You can pass a Server Component as a child or prop of a
// Client Component.
import ExampleClientComponent from './example-client-component'
import ExampleServerComponent from './example-server-component'
 
// Pages in Next.js are Server Components by default
export default function Page() {
  return (
    <ExampleClientComponent>
      <ExampleServerComponent />
    </ExampleClientComponent>
  )
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Next.js 13 中使用标记为“use client”的提供程序包装整个应用程序 的相关文章

随机推荐

  • ASP.NET:获取*真实*原始 URL

    在ASP NET中 有什么办法可以得到real原始网址 例如 如果用户浏览到 http example com mypage aspx 2F http example com mypage aspx 2F 我希望能够得到 http exam
  • Phonegap 中使用 AJAX 的 CSRF 令牌

    我正在开发一个应用程序Phonegap使用 Django 后端 后端使用csrf 所以我需要我的Phonegap要使用的应用程序csrf所以它可以与Django 我读到你可以使用csrf通过Ajax 但我没能让它工作 您能举个例子告诉我我该
  • React Redux 混乱

    事实证明 Redux 对我来说有点难以理解 我想知道是否有人可以帮助我指出正确的方向 以获取我想要的结果 只是一个预警 我正在使用 ES6 语法 好的 我已经设置了一些沙箱来测试 redux 的工作原理 这是我正在使用的当前文件设置 act
  • ActiveAndroid 使用架构迁移预填充表

    我想第一次创建一个表 数据库版本 1 并默认插入2行 该表需要由ActiveAndroid自动创建 并且应该通过我在1 sql文件中编写的SQL插入记录 该表看起来不错 但根本没有插入行 没有抛出错误 该模型如下所示 Table name
  • Select2:预选项并通过templateSelection正确渲染

    使用时选择2 v4 https select2 github io 建议的 实际上是正确的 方式以编程方式设置选定的值 就是操作底层的select元素 添加想要的
  • 来自字符串的 Swift Keypath

    有没有办法在 Swift 4 中从字符串创建 Keypath 以通过路径或变量名访问结构中的值 最后我发现我应该使用 CodingKeys 而不是 KeyPaths 通过 String 访问结构体变量的值 提前致谢 迈克尔 考虑你有这样的东
  • 实体框架将 s 添加到我的 .dbo

    我现在使用 Entity Framework DbContext 但遇到了异常 towars dbo 未找到 这很奇怪 因为在我的网站上我总是询问 towar dbo 但没有 towars dbo 你知道问题出在哪里吗 InnerExcep
  • 如何使用 C# 获取 Mozilla 浏览器的当前位置 URL? [复制]

    这个问题在这里已经有答案了 可能的重复 获取 Firefox 网址 https stackoverflow com questions 430614 get firefox url 我在开发 Windows 应用程序以获取正在运行的 Moz
  • 如何确定Access数据库中哪个表使用的空间最多?

    有没有简单的方法可以确定 Access 2007 数据库中每个表使用了多少空间 我有一个异常大的 Access 数据库 需要找出哪个表使用最多的空间 行计数没有提供有关已用空间的足够信息 我知道这是一篇旧文章 但我根据自己对同一问题的经验有
  • mySQL中外键必须是索引吗?

    我刚刚自己创建了第一个 mySQL 表 除了使用 Joomla Wordpress 等 我是 MS SQL 开发人员多年 但通常我可以轻松地在 MS SQL 中创建外键 但我遇到了困难或这里缺乏知识 这是我的表格 users user id
  • Spark Dataframe 列可为 null 的属性更改

    我想更改 Spark Dataframe 中特定列的可为空属性 如果我当前打印数据框的模式 它看起来如下所示 col1 string nullable false col2 string nullable true col3 string
  • 更改 UIImage 的对比度、亮度、饱和度或颜色

    我正在寻找一种修改某些元素的好方法UIImage例如亮度 对比度 饱和度 对于彩色图像 和颜色 着色 现在我使用每像素操作 但它不是很快 对于图像中的每个像素 我修改对比度 亮度等的颜色数据 我使用来自UI图像调整 https github
  • 什么是 CLR 托管?

    什么是 CLR 托管 其用途是什么 See here http msdn microsoft com en gb library 9x0wh2z3 aspx有关与 CLR v2 NET 2 0 3 0 和 3 5 相关的 CLR 托管的信息
  • 如何在 CSS 中正确定位和缩放这些元素?

    我已经能够使用 html 和 css 正确定位和缩放网页中的一些元素 但是由于定位规则 我陷入了如何使用另外两个元素继续此操作的困境 图片中的 V 形图标必须位于标题为 向下滚动 的最后一段下方 我也希望它能够随屏幕尺寸缩放 正如我已经成功
  • 如何编辑和更新pdf文件?

    我正在使用 ASP NET 开发一个 Web 应用程序 其中一项要求要求我打开包含表单字段的给定 pdf 文件 填写字段 例如选中复选框 从选择输入中选择值以及在文本框中输入文本等 设置字段后 我需要将其提交到服务器并将其另存为新的 pdf
  • PHP 浮点错误与基本数学[重复]

    这个问题在这里已经有答案了 可能的重复 为什么十进制数不能用二进制精确表示 https stackoverflow com questions 1089018 why cant decimal numbers be represented
  • 如何将 MVC 5 IdentityModels.cs 移动到单独的程序集中

    我想知道是否有人遇到了我在尝试搬家时遇到的问题ApplicationUser进入模型项目 所有其他模型都驻留在其中 包括与用户表相关的模型 我的测试 MVC 5 解决方案由一个 Web 项目和两个类库组成 一个用于数据访问层 DAL 另一个
  • C# 和 SQL Server 中嵌套 using 的用法

    这个线程是一个延续是否有理由在 C 中使用子句检查多个内部的 null https stackoverflow com questions 2220422 is there a reason to check for null inside
  • 支持 Edge 浏览器中的滚动条样式

    看起来您可以通过 IE 11 使用 IE 特定的滚动条样式 例如 scrollbar face color scrollbar track color 等 但不能在 Edge 中使用 Edge 有替代方案吗 具体很难知道 没有官方文档 ht
  • 在 Next.js 13 中使用标记为“use client”的提供程序包装整个应用程序

    我正在 Next js 中开发一个小型应用程序 但我还没有完全理解客户端与服务器端渲染的情况 我一直在工作这个伟大的指南 https www misha wtf blog supabase auth next 13 pkce关于使用 Sup