React-universal-ssr
React-universal-ssr copied to clipboard
路由是:id这样的,然后actions获取动态参数的不能服务端渲染
如题 路由配置代码:
const LoadableAnimeDetail = Loadable({
loader: () => import(/* webpackChunkName: 'detail' */'../../containers/detail'),
loading: Loading,
});
// ------------------
{
path: '/anime/:id',
exact: true,
component: LoadableAnimeDetail,
thunk: detailThumk,
}
localhost:8080/anime/13213 可以正常访问,但用dev:server的时候,没有服务端渲染成功。不是动态获取参数的可以正常渲染。
看了一圈子,不知道从哪里改,有空的时候可以看一下,还是我哪里配置对。
解决了,应该是前端和服务端传入的参数不一致: src\store\actions\thunk.js 定义函数的时候多加个参数如:
export const detailThumk = (store, params) => store.dispatch(getAnimeDetail(params))
server\clientRouter.js 这里再修改一下,判断有没有传入参数:
const promises = branch.map(({ route, match }) => {
const params = JSON.stringify(match.params) === '{}' ? route.thunk(store) : route.thunk(store, match.params)
return route.thunk ? params : Promise.resolve(null)
});
但不知道有没有更好的方法了。如果有麻烦告知下。
拿你的代码我做了修改,这个是我修改的地址:https://gitee.com/dxhuii/react-ssr
谢谢你,看了你的改造学习了,其实还有一种实现,就是在组件的静态方法static里面写,那样就可以在路由嵌套很深时也是不会有影响的,你可以试试,我在现在的一个项目里就是改用了static方法。
@wd2010 这个我还真没有写过,有没有例子帖一下看看。
@wd2010 有时间把static静态方法加进来吧,我学习下,研究了一下,没弄好。我也是刚刚学习服务端渲染,之前看了next.js也不错。不过还是想自己搞搞。学习下原理。
谢谢你,看了你的改造学习了,其实还有一种实现,就是在组件的静态方法static里面写,那样就可以在路由嵌套很深时也是不会有影响的,你可以试试,我在现在的一个项目里就是改用了static方法。
楼主我想请教一下,使用了react-loadable后,返回的高阶组件如LoadableHome是丢失Home组件的静态方法的,请问这个有什么好的解决方案吗