Vuetify中嵌套Nuxt链接触发Hydration不匹配警告的原因是什么
问题原因分析
- 核心原因是HTML规范禁止
<a>标签嵌套,你当前的代码产生了非法的嵌套<a>标签结构,触发Hydration不匹配:- 外层
v-card添加了nuxt和:to属性,Vuetify会将其渲染为<a>标签作为路由跳转容器 - 卡片内部的
v-btn同样添加了nuxt和:to属性,也会被Vuetify渲染为<a>标签 - 服务端渲染时会按照嵌套结构输出代码,但浏览器解析HTML时会自动将非法嵌套的
<a>标签拆分为平级的独立标签,导致服务端输出的DOM结构和客户端Hydration时预期的虚拟DOM结构不一致,因此抛出警告
- 外层
- 对应你描述的验证逻辑:将内部Nuxt链接替换为
router.push触发跳转后,内部的v-btn不会被渲染为<a>标签,嵌套结构消失,因此警告自动消除 - 可选优化点:你当前调用组件时用数组下标
i作为v-for的key,如果后续列表有增删排序操作也可能引发Hydration异常,建议替换为文章的唯一id等业务唯一值作为key
内容的提问来源于stack exchange,提问作者Hamza Mogni
相关产品推荐
相关产品推荐

