(本系列仅作为nextjs学习笔记,作为,如有问题补充欢迎各位贤者先达指点) 近日粗粗学习nextjs,总结三个和传统react框架最大的区别:
一、路由从“手动区分”到“结构生成”
个人认为区别于传统的react框架(redux、mobx)、react-router,nextjs最直观的改变就是项目路由的设置方式,开发者只需要专注于布局(layout.ts)和页面(page.ts),用户可以访问的路由页面都和开发者设置的项目结构保持一致:
二、“服务端组件”(Server Components)和“客户端组件”(Client Components)
传统的react使用客户端组件,这种模式是把整个前端项目打包后的js发送到浏览器再执行。nextjs提出了服务端组件,这种模式是先在后台执行结果,再把结果发送到前台,不会发打包后js到前台。
如果用比喻表达这种方式,在传统的 React 中,你的浏览器(餐桌)需要做所有事情:领班把所有食材(JS代码)端上来,顾客(浏览器)必须自己切菜、自己炒菜(执行JS渲染),最后才能吃(看到页面)。
Server Components (RSC) 的模式是:
- Server Component (服务端组件) = 后厨: 厨师在后厨把菜炒好,摆好盘。
- Client Component (客户端组件) = 餐桌上的调料瓶: 只需要把成品菜端上桌,顾客只需要负责撒点胡椒粉(交互)即可。
最关键的区别: Server Components 的代码永远不会被发送到浏览器。浏览器收到的只是计算好的结果(类似 HTML 的结构)。nextjs默认都是服务端组件,如果组件中要使用useState、onclick这样涉及到交互的操作,可以声明'use client'把组件转换成客户端组件。
注意:
1、服务端组件中console.log输出是直接在终端中展示的,只有客户端组件才能支持在浏览器中输出console.log结果
三、项目结构和文件命名
nextjs有一套完备的文件命名,每一个文件命名都对应一种职能,这一点可以参考官方文档:
nextjs官方仍然在更新完善,强烈建议有兴趣的同仁去看一看git上面的官方demo,这些demo也都可以线上运行直接看效果。