很多人讨论 nextjs 不支持在 server component 中使用 hooks 感到不解/不满。
其实我对这种观点本身也挺不解的,毕竟 server component 只是在服务端渲染 react 组件(这一点 vite 也能做到),如果它要支持 hooks 了,我反倒觉得匪夷所思了。
1
wisetc 5 天前 via iPhone
組件生命週期原因,以及狀態變化過程,在 node 中渲染沒有意義,缺失了在瀏覽器中的交互過程,而只得到一個可以在瀏覽器中得到的結果
|
2
Frankcox 5 天前
我现在是正在学 Next.js ,请教一下,async/await is not yet supported in Client Components, only Server Components. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server. Error Component Stack 。 客户端组件是不应该使用 async await 的,那是应该把 async 获取数据的部分和组件页面内容分开两个文件处理吗?
|
3
9ki 5 天前
要怪就怪 useEffect 的设计,心智负担重不提,还只能在里面获取数据,要知道 Nextjs 开发者首先是 React 开发者。
还有一方面,Hooks 的一大优点就是可以共享逻辑,但是用 getStaticProps/getServerSideProps 完全丧失了这部分优势。 |
4
epiloguess OP @Frankcox 这取决于 1.组件渲染发生的位置,你希望发送给用户一个渲染好的结果(注重渲染速度),还是发送一个 rsc 让浏览器自己渲染(注重交互),2.数据请求发生的位置,一般来说服务器相比用户,更靠近数据库,但是你 await 的这个请求,不一定是你的 api ,它可能是个第三方的,有次数限制的。
|
5
Frankcox 5 天前
@epiloguess 谢谢,我目前的场景是 React 调用第三方 api ,拿到数据后自己处理渲染。
|
6
Plumbiu 5 天前
可能他们用惯了 vue ,vue 响应式确实可以脱离浏览器环境,然后理所应当的觉得 nextjs 的 rsc 也可以用 hooks ,但凡稍微了解一下 react 的设计理念啥的(虽然我觉得好不到哪里去),hooks 运行在服务端一点都不合理,这点直觉都没有吗....
|
7
MagicalCarl 5 天前
没有感到不解/不满,让我不满的是所有组件默认是 server component
|
8
karott7 5 天前
我觉得不是 server component 或者 hooks 的问题,只能说做全栈或者 ssr 就是有心智负担,因为服务端和客户端的运行时和组件运行逻辑终究是不同的
|