gpt4 book ai didi

apollo - Nuxt JS Apollo数据仅在页面刷新后可用

转载 作者:行者123 更新时间:2023-12-03 13:57:31 26 4
gpt4 key购买 nike

我正在Nuxt内使用Apollo获取一些数据。不知何故,导航到该页面时出现错误

Cannot read property 'image' of undefined

当我刷新页面时,一切正常。

我发现有一些人遇到类似问题,但是似乎没有解决方案对我有用:/

这是我现在的模板文件:

/products/_slug.vue
<template>
<section class="container">
<div class="top">
<img :src="product.image.url"/>
<h1>{{ product.name }}</h1>
</div>
</section>
</template>

<script>
import gql from 'graphql-tag'

export default {
apollo: {
product: {
query: gql`
query Product($slug: String!) {
product(filter: { slug: { eq: $slug } }) {
slug
name
image {
url
}
}
}
`,
prefetch({ route }) {
return {
slug: route.params.slug
}
},
variables() {
return {
slug: this.$route.params.slug
}
}
}
}
}
</script>

基本上,除非刷新页面,否则$ apolloData保持为空。任何想法将不胜感激

编辑
走近了一步(我认为)。以前,第一次导航到页面时,所有内容(image.url和名称)都将是不确定的。

我补充说:
data() {
return {
product: []
};
}

在导出的顶部,现在至少总是定义名称,因此,如果我删除图像,一切都会按预期进行。只是image.url一直未定义。

我注意到的一件事(不确定相关性)是仅使用会发生此问题,如果我使用正常的标签,它会起作用,但当然会消除vue的魔力。

EDIT-2
所以以某种方式,如果我将Nuxt降级到1.0.0版,一切正常

最佳答案

我也偶然发现了这个问题,并发现它隐藏在Vue Apollo文档中。

尽管与OP的回复非常相似,但官方的方式似乎是使用“$ loadingKey”属性。

在文档中这很令人困惑,因为发生了很多事情。
https://vue-apollo.netlify.com/guide/apollo/queries.html#loading-state

<template>
<main
v-if="!loading"
class="my-8 mb-4"
>
<div class="w-3/4 mx-auto mb-16">
<h2 class="mx-auto text-4xl text-center heading-underline">
{{ page.title }}
</h2>
<div
class="content"
v-html="page.content.html"
></div>
</div>
</main>
</template>

<script>
import { page } from "~/graphql/page";

export default {
name: 'AboutPage',

data: () => ({
loading: 0
}),

apollo: {
$loadingKey: 'loading',
page: {
query: page,
variables: {
slug: "about"
}
},
}
}
</script>

如果需要在vue中使用 react 性(例如,ug),则可以使用以下方法进行操作。
<template>
<main
v-if="!loading"
class="my-8 mb-4"
>
<div class="w-3/4 mx-auto mb-16">
<h2 class="mx-auto text-4xl text-center heading-underline">
{{ page.title }}
</h2>
<div
class="content"
v-html="page.content.html"
></div>
</div>
</main>
</template>

<script>
import { page } from "~/graphql/page";

export default {
name: 'AboutPage',

data: () => ({
loading: 0
}),

apollo: {
$loadingKey: 'loading',
page: {
query: page,
variables() {
return {
slug: this.$route.params.slug
}
}
},
}
}
</script>

关于apollo - Nuxt JS Apollo数据仅在页面刷新后可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55213290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com