You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何React RSC的两个示例中,一个用'use server'另一个不用?

为什么两个React示例对'use server'的需求不同?

示例1的核心逻辑

示例1里的db.comments.get(note.id)是在服务器组件(Server Component)内部直接执行的:

  • 服务器组件本身就只在服务器端运行,所有代码都不会被发送到客户端。调用数据库的逻辑从始至终都在服务器上完成,只是把未完成的Promise传递给客户端组件,让客户端通过use()钩子等待结果而已。
  • 整个过程没有“客户端触发服务器执行代码”的需求,所以根本不需要'use server'标记——服务器组件的代码天生就在服务器跑,不需要额外声明。

示例2的核心逻辑

示例2里的createNoteAction是要在客户端触发执行的:

  • 这个函数是作为按钮点击事件传递给客户端组件的,客户端本身不能直接操作数据库(既不安全也没有数据库连接)。
  • 加上'use server'标记后,React会把这个函数转换成一个“服务器引用”(你可以看客户端组件里打印的onClick值),客户端点击按钮时,会通过RPC调用触发服务器端的这个函数执行数据库操作。
  • 如果不加这个标记,函数会被序列化到客户端执行,要么因为没有数据库连接报错,要么直接把敏感的数据库操作暴露给客户端,完全不符合安全要求。

本质区别总结

  • 示例1:服务器主动执行数据读取,全程在服务器环境,无需跨环境触发,所以不用'use server'。
  • 示例2:客户端触发服务器执行操作,需要明确告诉React“这段逻辑必须在服务器跑”,所以必须加'use server'。

内容的提问来源于stack exchange,提问作者David Klempfner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:28:14