我们应该如何在 Next.js 13 中使用 React 的 Context API?

Big*_*boy 7 reactjs server-side-rendering next.js

我们在 next.js 12 应用程序中使用了 React 的上下文 API。

我们想要升级到 next.js 13。

我们得到这个错误:

React__WEBPACK_IMPORTED_MODULE_0__.createContext 不是一个函数

对于这段代码:

import React from 'react'

const SiteContext = React.createContext()

export default SiteContext
Run Code Online (Sandbox Code Playgroud)

我们现在应该做什么?我在网上找不到这方面的资源。

另外,我们需要服务器上的 Context API,因为 SEO 很重要,而且我们不想在客户端上呈现。

jme*_*e11 6

问题是您需要“使用客户端”指令。

由于您的 import 语句,该错误已被抑制。将导入更改为import { useContext } from 'react',您将收到以下错误:

您正在导入需要 createContext 的组件。它仅在客户端组件中工作,但其父组件都没有标记为“使用客户端”,因此默认情况下它们是服务器组件。

查看beta 文档以获取更多详细信息,但基本上,应用程序目录中的所有组件都是服务器组件。对于客户端组件,您需要使用该指令。

"use client"

import React from 'react'

const SiteContext = React.createContext()

export default SiteContext
Run Code Online (Sandbox Code Playgroud)

  • 这是否意味着我们不能在服务器端使用Context API?是 React 限制还是 Next 限制? (2认同)
  • 是的,useState、useEffect 和 createContext 是仅限客户端的功能。“使用客户端”指令是作为服务器组件功能的一部分随 React 引入的,因此它是一个“React 事物”,但我不确定它本身是否是一个限制。如果您的组件需要支持用户交互(例如需要状态的交互),那么根据定义,它就是客户端组件。 (2认同)
  • 简短的回答是肯定的。查看 [docs](https://beta.nextjs.org/docs/rendering/fundamentals#client-and-server-rendering-at-the-component-level) 了解详细信息,但是,服务器和客户端组件都可以可以在构建时在服务器上预渲染。 (2认同)