next.js React服务器组件是否适合基于客户端状态获取部分页面?

dgenwo3n  于 12个月前  发布在  React
关注(0)|答案(1)|浏览(106)

我正在写一个Next.js 14 App Router应用程序。我想在react-map-gl标记onClick处理程序中显示一个“弹出”组件。“信息框”弹出内容需要根据所选标记进行更改,通过数据库查找。
React Server Components现在感觉是正确的方法,但它们只渲染一次。这可以通过使用revalidatePath无效来规避,但这似乎会重新渲染整个页面。我不想重绘我的Map,只是'信息框'组件。
各种示例显示数据库更改,然后重新加载相同的数据(数据库中现在存在添加内容)。如果更改是在数据库表中,则可以工作,但如果我想更改数据库查询,则不行。
我想改变我在数据库中查询的内容(WHERE slug = input子句),所以我需要将客户端状态的改变传递给服务器,这似乎是不可能的。
看起来我需要用Server Actions来代替。我是不是有点离谱?

ql3eal8s

ql3eal8s1#

在React Labs:What We've Been Working On - March 2023中描述的reactjs/server-components-demo似乎做了我所追求的事情,但它似乎是通过将状态提升到App组件main/src/App.js之上来实现的:

export default function App({selectedId, isEditing, searchText}) {
  return (
    ...
    <Note selectedId={selectedId} isEditing={isEditing} />
    ...
  );
}

字符串
状态由server/api.server.js#L109提供:

renderReactTree(res, {
    selectedId: location.selectedId,
    isEditing: location.isEditing,
    searchText: location.searchText,
  });


我不确定这在标准的Next.js App路由器项目中是否可行。

相关问题