原文地址:Communication Between Client Components in Next.js - This Dot Labs
在 NextJS 中,不同组件树下的客户端组件如何通信?
1. 将状态提升为客户端组件
通过 Context
实现类似于 Zustand 的状态管理方式,将状态提升到最外层的客户端组件内,为了不影响服务器组件的正常渲染,客户端组件需要使用 Context
包裹,并将 children
作为子组件渲染
children
可以是服务器组件
2. 通过 URL 查询参数处理
这种方式是将状态存储在 URL 上,通过 useSearchParams
来在不同的客户端组件内获取URL参数,修改状态时通过 router.replace
来修改参数,触发 useSearchParams
Hook 的更新
状态更新组件
状态获取组件
3. 将状态存储到服务器
计数器显示组件将计数器值作为属性接受,值是从服务器组件中从数据库等地方读取的。
按钮组件在点击时调用一个 Server Action ,更新计数器的值,并且调用 revalidatePath
或者 revalidateTag
来更新缓存,从而重新渲染计数器显示组件
Server Action
按钮组件
计数器显示组件
父组件