Posted on:
Last modified:
Next.js 是一个好库,设计上很优雅,实现上也没有什么大的问题。然而,考虑再三我还是决定暂时 移除 next.js 了。不是我不想要服务端渲染,而是整个 JS 的生态圈大部分的库都没有考虑服务端 渲染,这就导致我在学习和使用的过程中时不时要自己考虑如何处理服务端渲染的情形。本身我就 是个初学者,连教程都看不太懂,再考虑服务端渲染,就一个头两个大了。另外一个原因就是组里 另一个项目使用了 react-router, 没必要两个都搞了。这里姑且记录下移除 next.js, 添加 react-router 的过程,以便以后参考。
2021-10 更新:
现在看来,对于偏向 to B 的管理界面类项目来说,next.js 确实是不适合的,而且也没必要,毕竟 面向内部,没有 SEO 的问题。
对于 to C 的项目来说,next.js 非常必要,不仅是 SEO 的问题,对于用户体验的提升也很大。
2022-07 更新
React-router 不好的部分:
所以最终的结论是:
pnpm remove next
更改 package.json scripts 部分的脚本:
"scripts": {
"start": "react-scripts start",
"dev": "react-scripts dev",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
还好之前 create-react-app 创建的 index.js 和 App.js 还没删掉,直接就能用了。
Nextjs 中规定了只能用 module css 或者 scoped css, 而在 react 中没有硬性的规定。使用原生 CSS 自然最简单,但是容易名字冲突。鉴于另一个项目使用了 sass, 这里也用 sass 以统一下开发体验。
暂时先保留 pages, components, layouts 三个文件夹,但是需要使用 react-router 路由。
yarn add react-router react-router-dom
在 index.js 中使用 router, 去掉 <App/>
更改所有的 Link
. 从 import Link from 'next/link'
改成 import {Link} from 'react-router-dom'
,
其中需要把 href
改为 to
.
更改所有的 useRouter
的跳转,需要使用 useHistory
.
页面里的 getServerSideProps 显然是不能用了,需要改用 redux 的 thunk 来获取数据,所以需要 以下几步:
"proxy": "http://localhost:4000",
即可一般来说,我们把相应的 getServerSideProps 函数的逻辑转移到对应的 Page 组件的 useEffect(fn, [])
钩子中就可以了。
在 next.js 中,需要在两个地方指定代理,一个是后端在 server 预加载数据的时候,需要指定上游 API 的地址,另一方面,在浏览器中发送 ajax 请求的时候需要设定代理访问上游 API, 否则会有跨 域的问题。
使用 react-router 之后问题就简单了,所有数据都是从前端加载的,所以只需要指定代理的地址就 好了。但是也要考虑到几种不同的环境:
综合考虑后,采用以下几点:
© 2016-2022 Yifei Kong. Powered by ynotes
All contents are under the CC-BY-NC-SA license, if not otherwise specified.
Opinions expressed here are solely my own and do not express the views or opinions of my employer.