nextjs 提到了 React Server Components 使用的优点,并建议对于静态部分尽量使用 React Server Components。但是 React Server Components 是不支持 Context 的,那么就要求带 Context 的组件使用 "use client",而很多组件库使用了 Context 来提供主题设置,往往这个设置都放置在顶层上,这又导致了 React Server Components 几乎没有了作用。
这种矛盾怎么解决?
nextjs 提到了 React Server Components 使用的优点,并建议对于静态部分尽量使用 React Server Components。但是 React Server Components 是不支持 Context 的,那么就要求带 Context 的组件使用 "use client",而很多组件库使用了 Context 来提供主题设置,往往这个设置都放置在顶层上,这又导致了 React Server Components 几乎没有了作用。
这种矛盾怎么解决?
13 回答12.9k 阅读
8 回答2.7k 阅读
2 回答5.1k 阅读✓ 已解决
5 回答1.3k 阅读
3 回答2.3k 阅读✓ 已解决
5 回答1.5k 阅读✓ 已解决
3 回答2.2k 阅读
首先需要说明一点:并不是所有被使用
"use client"
的Context.Provider
包裹的子组件都会渲染成RSC(React Server Components)
,而是只有消费Context
(使用了useContext(Context)
)的子组件才会被渲染成为RSC
。如下图所示:然后我个人认为
nextjs
这种处理方式其实十分合理,因为组件消费Context
的行为本身就表明这个组件是有状态的,不应该也不能被静态渲染成服务端组件。这种处理方式既保留了RSC
的静态渲染的优点,同时也提供了客户端组件消费Context
状态的能力。希望我的回答对题主有所帮助~