Nuxt 如何让子组件也支持 asyncData?

2020-06-16 07:19:32 +08:00
 linuxsteam

可行方法

目前使用做法是 nuxt (pages)页面组件使用 asyncData 方法,通过 props 传参给(components) 是让子组件进行服务端渲染 这样做的话,调一次子组件就得在父组件复制一份 asyncData 放在父组件,重复代码感觉比较多,是我使用姿势不正确吗?

  1. Layout 已经测试,也不支持 asyncData
  2. components 使用 asyncData 也测试了,官方文档是正确的 的确这里用不了

------代码结构

------官网对 Layout 介绍

问题

目前就想让 PageHeader 服务端渲染,为了 SEO(服务端渲染)还要遵循 Vue 的风格组件化。还想杜绝重复代码,目前小弟没什么招数了。请求各位前端大佬

3756 次点击
所在节点    Vue.js
11 条回复
noe132
2020-06-16 07:46:35 +08:00
https://nuxtjs.org/api/pages-fetch 了解一下
或者用 store
linuxsteam
2020-06-16 08:35:50 +08:00
@noe132 谢谢,了解了。也许只能用这个了
fengxianqi
2020-06-16 08:38:45 +08:00
把生命周期都写在子组件里不见得是好事,后期维护也困难,子组件只管输入输出也是很好。可以将拉取数据的代码用 mixin,在需要的页面引入。
linuxsteam
2020-06-16 09:13:59 +08:00
@fengxianqi Header 这种东西,的确每个页面都要加载。。。动态菜单,刚刚又看了下 B 站和掘金,他们好像是把 Header 大部分都写死了(或者服务器渲染了)
fengxianqi
2020-06-16 09:35:16 +08:00
@linuxsteam #4 我感觉是你用得不对,header 既然是全局的,那只会在一个地方用到,然后所有子页面都用 router-view,而不是每个页面都得引这个 header
zhuweiyou
2020-06-16 09:47:38 +08:00
NuxtChild 应该是你想要的东西。
linuxsteam
2020-06-16 11:26:48 +08:00
@fengxianqi 是的,nuxt 叫 layout,但是 layout 里面也无法使用 asyncData
linuxsteam
2020-06-16 11:31:37 +08:00
@zhuweiyou 这个我也考虑了。
1. 页面套页面 会产生多余路由。 还需要路由守卫去抛出这些访问请求
2. nuxt 我都不知道能不能 Imort page 里的东西 @_@
sliveryukilee
2020-06-16 13:48:41 +08:00
1. 子组件不能用 asyncData 不代表不是服务端渲染
sliveryukilee
2020-06-16 13:55:42 +08:00
2. 全局的归全局, Header 既然是公用的,那么放在 layout 里,使用 nuxt serverInit + store 初始化数据不行吗?
linuxsteam
2020-06-16 17:21:57 +08:00
@sliveryukilee 目前只能这样了, 我说的有问题,都是服务端渲染。
不过对于蜘蛛的 体验上不一样,asyncData 是服务端发起 http 请求后存放完数据返回给前台。

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

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

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

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

© 2021 V2EX