用 nextjs 做 Reactjs SSR 的一些问题

2019-10-07 03:42:10 +08:00
 ericgui

[可能有错误,请大家轻拍]

最近沉迷 SSR,因为考虑到了一些需求:

当然了,谷歌牛逼,都能直接解析 SPA 了,但问题我主要还是一个用户体验上:用户点击一个 url,SPA 就 404 了,但一个体验很好的网站,显然希望是能够加载出来的。

所以就开始了迁移,从 React SPA 迁移到 nextjs

nextjs 很多大坑,比如说,

我会继续补充

1660 次点击
所在节点    程序员
21 条回复
skenan
2019-10-07 04:11:34 +08:00
nextjs 配合 now.sh 还是很好用的
ericgui
2019-10-07 04:14:50 +08:00
@skenan 这里的风险就是 vendor lock-in,而且我还是希望能够面向 AWS 编程,或者面向阿里云。所以折腾得久了一点。

此外,我这个系统里,不仅仅有 nextjs,还有一些 php 的东西,并不是纯粹的 nextjs
skenan
2019-10-07 04:17:47 +08:00
@ericgui 嗯,如果单纯测试的话,now.js + github 让 PR 可视化,我们 nextjs 项目也是用 docker 在阿里云上部署的
shadowwalker2644
2019-10-07 04:35:14 +08:00
Vendor lock in 很难避免,这也是云服务商设计的商业策略。router 的话你可以看一下 after.js ,但也是前端。SEO 什么的需要后端 route 配合才行,我觉得只要关键几个 URL 就行了
ericgui
2019-10-07 05:44:16 +08:00
@shadowwalker2644 我刚才看了一下,原来 after.js 的作者就是 razzle 的作者啊,所以我就很轻易的排除了这个选项,我当初选择用什么做 ssr 的时候,也是挣扎了好一阵子。

nextjs 显然有很多问题,但这是最流行的,遇到问题可以 google 出来,文档虽然简陋,但该有的也都有。而其他的方案,比如这个 afterjs,就一个 readme,而且是一个个人开发者维护,就算他再牛逼,我也不敢用。我用 razzle 也写了一些,后来直接废弃,感觉还是 nextjs 还是更成熟一些。

我在写一个解决方案,所以不是在尝试新技术,而是用最成熟的技术去解决一个存在已久的问题。
shadowwalker2644
2019-10-07 05:51:05 +08:00
我也是坚持用 nextjs,可以加 vx(用户名)交流一下。
maomaomao001
2019-10-07 10:56:30 +08:00
现在 next9 已经相当好用了,next8 的时候,问题多的要死,
路由的话,你多看几遍文档,也学会了,比起 react router,转换一点思路的事情,而且还相当简单
ericgui
2019-10-07 11:14:50 +08:00
@maomaomao001 不止一个人这么说:)
duan602728596
2019-10-07 11:37:06 +08:00
spa404 是你的配置问题,单页应用需要把请求都重定向到 index.html。SSR 的话,我是直接在多加一套 webpack 配置就 ok 了。
alexmy
2019-10-07 11:52:38 +08:00
好久都没用过 next.js 了,现在都用阿里的那个 beidou,底层的服务端是 egg.js ,有超级多的 egg 插件可以使用,简单的站点连逻辑都写在上面了。
ericgui
2019-10-07 13:34:50 +08:00
@duan602728596 myblog.com/hello-world.html 就算你重定位到 index.html 又有什么意义?我当然知道怎么做 catch all route,但这没意义
ericgui
2019-10-07 13:36:26 +08:00
@alexmy 谢谢,我研究一下 beidou
ke1vin
2019-10-08 09:29:20 +08:00
总感觉 nextjs 的 webpack 配置方式不够自由和透明,这是我最不适应的地方
KuroNekoFan
2019-10-08 14:46:44 +08:00
nextjs 整合 webpack 的方式过于黑箱,不容易做二次开发
benjunk
2019-10-08 14:49:47 +08:00
nextjs 一直有个问题,,,没法加 baseurl,几个 issue 都提到过,最后搞得我自己拉源码改
ericgui
2019-10-09 00:30:21 +08:00
@KuroNekoFan 估计是故意的
ericgui
2019-10-09 00:30:31 +08:00
@benjunk 牛逼
ericgui
2019-10-10 05:12:39 +08:00
@benjunk 改完了之后咋办,是提 pr ? 还是自己用一个私有版本?
benjunk
2019-10-10 10:19:40 +08:00
@ericgui pr 没希望的,你可以搜索 issue 里面,有个讨论 baseurl 的都好长了,,,后来没维护下去,next 更新太快了,维护自己这个小功能就要放弃 next 新东西,,哎
maomaomao001
2019-10-14 11:21:33 +08:00
_app.js 里明显是可以用的估计你用的不太对

```
static async getInitialProps({ Component, ctx }) {
//初始化
//统一跳转之类的


// 不要忘记这一行就可以了
if (Component.getInitialProps) {
pageProps = await Component.getInitialProps({ ...ctx });
}

}


```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/606666

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX