vue.js - vue-apollo 和 nuxt 中的预取智能查询应该如何工作?
问题描述
我目前正在做一个项目,我正在使用 nuxt、vue-apollo 以及包装 vue-apollo 并将其集成到 nuxt 中的 nuxt apollo-module。
我在我的页面中定义了一个相当简单的智能查询:
<template>
<div>
<ul>
<li v-for="itinerary in itineraries" :key="itinerary.id">
{{ itinerary.id }}
</li>
</ul>
</div>
</template>
<script>
import gql from 'graphql-tag';
export default {
name: 'HomePage',
apollo: {
itineraries: {
prefetch: true,
query: gql`
query {
itineraries {
id
}
}
`
}
},
data() {
return {
itineraries: []
};
}
};
</script>
根据我从文档中了解到的情况,预取应该在服务器上启动查询,但它不是阻塞的,因此服务器端渲染将在返回数据之前继续。为了避免水合错误,nuxt apollo 模块应该使用 apollo 缓存来存储结果,如 Vue SSR 指南中所述:https ://ssr.vuejs.org/guide/data.html#data-store .
但是,当我加载页面时,我在控制台中看到了水合错误:
childNodes 与 VNodes 不匹配:
NodeList [ li ]Array [] vue.runtime.esm.js:6421 [Vue 警告]:客户端渲染的虚拟 DOM 树与服务器渲染的内容不匹配。这可能是由不正确的 HTML 标记引起的,例如在 p 中嵌套块级元素或缺少 tbody。Bailing 水合作用并执行完整的客户端渲染。
此外,在我的 graphql 服务器上,我看到收到了两次行程查询。我假设在 SSR 期间一次,然后在客户端再次假设。
这对我来说似乎都不对,但老实说,我不确定库是否存在错误,或者我只是不明白预取在 SSR 场景中应该如何工作。
谁能解释这应该如何工作?
解决方案
推荐阅读
- url - 分析 - 参数从何而来
- css - 出现 CSS 类但未应用样式 -REACTSTRAP - CSS MODULES
- ios - 单击按钮时将按钮的图像从图像更改为另一个时出错
- service - 使用入口的动态重定向
- javascript - React js - 如何从子组件获取单击事件值到父组件?
- sql-server - 使用前一行的值更新列
- asp.net - 将应用程序从 net framework 2.0 升级到 4.5
- python - 绘制滚动平均值的 x 轴未正确显示
- reactjs - 谷歌浏览器:React 页面无法在谷歌 Chrome 浏览器中打开
- mysql - 带有 DEFAULT CURDATE() 的日期列抛出错误