V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
epiloguess
V2EX  ›  前端开发

吐槽一个 nextjs 中并不存在的槽点

  •  
  •   epiloguess · 6 天前 · 1528 次点击

    很多人讨论 nextjs 不支持在 server component 中使用 hooks 感到不解/不满。

    其实我对这种观点本身也挺不解的,毕竟 server component 只是在服务端渲染 react 组件(这一点 vite 也能做到),如果它要支持 hooks 了,我反倒觉得匪夷所思了。

    8 条回复    2024-12-22 20:58:18 +08:00
    wisetc
        1
    wisetc  
       6 天前 via iPhone
    組件生命週期原因,以及狀態變化過程,在 node 中渲染沒有意義,缺失了在瀏覽器中的交互過程,而只得到一個可以在瀏覽器中得到的結果
    Frankcox
        2
    Frankcox  
       6 天前
    我现在是正在学 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 获取数据的部分和组件页面内容分开两个文件处理吗?
    9ki
        3
    9ki  
       6 天前
    要怪就怪 useEffect 的设计,心智负担重不提,还只能在里面获取数据,要知道 Nextjs 开发者首先是 React 开发者。

    还有一方面,Hooks 的一大优点就是可以共享逻辑,但是用 getStaticProps/getServerSideProps 完全丧失了这部分优势。
    epiloguess
        4
    epiloguess  
    OP
       6 天前
    @Frankcox 这取决于 1.组件渲染发生的位置,你希望发送给用户一个渲染好的结果(注重渲染速度),还是发送一个 rsc 让浏览器自己渲染(注重交互),2.数据请求发生的位置,一般来说服务器相比用户,更靠近数据库,但是你 await 的这个请求,不一定是你的 api ,它可能是个第三方的,有次数限制的。
    Frankcox
        5
    Frankcox  
       6 天前
    @epiloguess 谢谢,我目前的场景是 React 调用第三方 api ,拿到数据后自己处理渲染。
    Plumbiu
        6
    Plumbiu  
       6 天前
    可能他们用惯了 vue ,vue 响应式确实可以脱离浏览器环境,然后理所应当的觉得 nextjs 的 rsc 也可以用 hooks ,但凡稍微了解一下 react 的设计理念啥的(虽然我觉得好不到哪里去),hooks 运行在服务端一点都不合理,这点直觉都没有吗....
    MagicalCarl
        7
    MagicalCarl  
       6 天前
    没有感到不解/不满,让我不满的是所有组件默认是 server component
    karott7
        8
    karott7  
       6 天前
    我觉得不是 server component 或者 hooks 的问题,只能说做全栈或者 ssr 就是有心智负担,因为服务端和客户端的运行时和组件运行逻辑终究是不同的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2629 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 15:21 · PVG 23:21 · LAX 07:21 · JFK 10:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.