V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请   登录
Vue.js
linuxsteam
V2EX  ›  Vue.js

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

  •  
  •   linuxsteam · 2020-06-16 07:19:32 +08:00 · 3752 次点击
    这是一个创建于 1408 天前的主题,其中的信息可能已经有所发展或是发生改变。

    可行方法

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

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

    ------代码结构 代码结构

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

    问题

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

    第 1 条附言  ·  2020-06-17 12:49:11 +08:00
    经过一天的突击学习:
    解决方案如下:
    使用 nuxtServerInit 初始化数据

    为什么不用 fetch?
    1. fetch 写在 layout 中不生效
    2. 写在 page 里,就必须每个 page 都得写这个方法(不访问指定页面的话,是不会更新 store 的)
  • 组件
  • asyncdata
  • nuxt
  • 渲染
    11 条回复    2020-06-16 17:21:57 +08:00
    noe132
        1
    noe132  
       2020-06-16 07:46:35 +08:00 via Android
    https://nuxtjs.org/api/pages-fetch 了解一下
    或者用 store
    linuxsteam
        2
    linuxsteam  
    OP
       2020-06-16 08:35:50 +08:00
    @ noe132 谢谢,了解了。也许只能用这个了
    fengxianqi
        3
    fengxianqi  
       2020-06-16 08:38:45 +08:00 via Android
    把生命周期都写在子组件里不见得是好事,后期维护也困难,子组件只管输入输出也是很好。可以将拉取数据的代码用 mixin,在需要的页面引入。
    linuxsteam
        4
    linuxsteam  
    OP
       2020-06-16 09:13:59 +08:00
    @ fengxianqi Header 这种东西,的确每个页面都要加载。。。动态菜单,刚刚又看了下 B 站和掘金,他们好像是把 Header 大部分都写死了(或者服务器渲染了)
    fengxianqi
        5
    fengxianqi  
       2020-06-16 09:35:16 +08:00
    @ linuxsteam #4 我感觉是你用得不对,header 既然是全局的,那只会在一个地方用到,然后所有子页面都用 router-view,而不是每个页面都得引这个 header
    zhuweiyou
        6
    zhuweiyou  
       2020-06-16 09:47:38 +08:00
    NuxtChild 应该是你想要的东西。
    linuxsteam
        7
    linuxsteam  
    OP
       2020-06-16 11:26:48 +08:00
    @ fengxianqi 是的,nuxt 叫 layout,但是 layout 里面也无法使用 asyncData
    linuxsteam
        8
    linuxsteam  
    OP
       2020-06-16 11:31:37 +08:00
    @ zhuweiyou 这个我也考虑了。
    1. 页面套页面 会产生多余路由。 还需要路由守卫去抛出这些访问请求
    2. nuxt 我都不知道能不能 Imort page 里的东西 @ _@
    sliveryukilee
        9
    sliveryukilee  
       2020-06-16 13:48:41 +08:00
    1. 子组件不能用 asyncData 不代表不是服务端渲染
    sliveryukilee
        10
    sliveryukilee  
       2020-06-16 13:55:42 +08:00
    2. 全局的归全局, Header 既然是公用的,那么放在 layout 里,使用 nuxt serverInit + store 初始化数据不行吗?
    linuxsteam
        11
    linuxsteam  
    OP
       2020-06-16 17:21:57 +08:00
    @ sliveryukilee 目前只能这样了, 我说的有问题,都是服务端渲染。
    不过对于蜘蛛的 体验上不一样,asyncData 是服务端发起 http 请求后存放完数据返回给前台。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1212 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 23:15 · PVG 07:15 · LAX 16:15 · JFK 19:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.

    玻璃钢生产厂家汉中玻璃钢动物雕塑厂家陕西玻璃钢天花吊顶批发长治玻璃钢种植池厂汕头玻璃钢花瓶制作朝阳玻璃钢花箱厂桂林商业美陈批发淮安玻璃钢前台生产厂家遂宁商场美陈定制乌海玻璃钢医疗外壳生产厂家宣城玻璃钢种植池多少钱大同不锈钢家具加工南阳玻璃钢家具厂家直销杭州玻璃钢外壳生产厂家烟台玻璃钢机械外壳厂家直销渭南玻璃钢兰州玻璃钢茶几价格乌海玻璃钢制品加工台州玻璃钢茶几厂家洛阳商业美陈价格朔州玻璃钢花坛南昌玻璃钢装饰批发长治玻璃钢花钵定制林芝玻璃钢人物雕塑厂家抚顺玻璃钢沙发多少钱四平玻璃钢造型公司乐山玻璃钢花盆制作长治玻璃钢设备外壳多少钱湖北玻璃钢坐凳厂家直销济南玻璃钢浮雕价格儋州不锈钢花盆哪家好香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

    玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化