我正在将 vue 3 与 apollo/client 一起使用,但出现错误

Posted

技术标签:

【中文标题】我正在将 vue 3 与 apollo/client 一起使用,但出现错误【英文标题】:I am using vue 3 with apollo/client but getting an error 【发布时间】:2021-04-27 06:05:54 【问题描述】:

我正在使用带有 apollo/client 的组合 api 的 vue 3。我从文档中做了所有事情,但这是我能做到的。我提供了一个正确的后端 url,只是无法弄清楚。这是我的代码,我在终端中收到警告

./node_modules/@vue/apollo-composable/dist/useQuery.js 中的警告

在浏览器控制台中我收到此错误。

Uncaught Error: Apollo client with id default not found. Use provideApolloClient() if you are outside of a component setup.
 <template>
 <div class="hello">
  working with graphql
 </div>
 </template>
       <script>
  import  useQuery,DefaultApolloClient  from "@vue/apollo-composable"
  import  provide  from "vue" 
  import gql from "graphql-tag"
  import ApolloClient,createHttpLink,InMemoryCache, from "@apollo/client/core"
  const httpLink = createHttpLink(
    uri: "http://localhost:3000/graphql",
  )
  const cache = new InMemoryCache()
  const apolloClient = new ApolloClient(
    link: httpLink,
    cache,
  )
  export default 
    name: "HelloWorld",
    setup() 
      provide(DefaultApolloClient, apolloClient)
      const  result  = useQuery(gql`
        query getPosts 
          Post 
            id
            context
            title`)
      console.log(result)
    ,
  
  </script>

【问题讨论】:

如果您在将 Quasar 与 Apollo 一起使用时遇到此错误,请参阅 ***.com/questions/70721226/…。 【参考方案1】:

provide vue 功能是为子组件注入依赖。如果您希望 ApolloClient 在您的所有组件中可用,您应该从顶部提供它:

//main.js

...

const apolloClient = new ApolloClient(
  link: httpLink,
  cache,
)

const app = new Vue(
  setup () 
    provide(DefaultApolloClient, apolloClient)
  ,

  render: h => h(App),
)

否则你可以使用provideApolloClient,甚至在设置函数或vue文件之外,比如导入的.js或.ts:

//userService.js
import 
    provideApolloClient,
    useQuery,
    useResult,
 from '@vue/apollo-composable';

...

const apolloClient = new ApolloClient(
  link: httpLink,
  cache,
)

provideApolloClient(apolloClient);

const  result, loading, onError, onResult  = useQuery(query)

export let users = useResult(result, [], data => data.users )



【讨论】:

如果这对我有用,我会很高兴;但这不是因为它抱怨ApolloClient&lt;NormalizedCacheObject&gt; is not assignable to parameter of type ApolloClient&lt;any&gt;. Property setLink is missing in type ApolloClient&lt;NormalizedCacheObject&gt; but required in type ApolloClient&lt;any&gt;【参考方案2】:

我遇到了同样的错误,但 让它运行,我意识到 repo 上的文档不完整。 https://github.com/quasarframework/app-extension-apollo/tree/v2

缺少这部分:

你的 src/App.vue 应该是这样的

<template>
  <router-view />
</template>
<script lang="ts">
  import  defineComponent, provide  from 'vue'
  import  ApolloClients  from '@vue/apollo-composable'
  import  apolloClients  from 'src/extensions/apollo/boot'

  export default defineComponent(
    name: 'App',
    setup() 
      provide(ApolloClients, apolloClients)
    ,
  )
</script>

PD:在 your-app\node_modules@quasar\quasar-app-extension-apollo\README.md 的库 README 中找到此内容

【讨论】:

【参考方案3】:

我自己对 Vue 还很陌生,但是关于警告;

warning in ./node_modules/@vue/apollo-composable/dist/useQuery.js

我相信此解决方案将取决于您项目的依赖版本,但我通过将此脚本添加到我的项目中来修复它:

https://github.com/vuejs/vue-apollo/issues/1011#issuecomment-714410089

如果您不使用 Vite,只需删除第 4-6 行即可修复 no such file or directory 错误。如果您有不同的依赖版本,请查看问题,您可能会找到适合您版本的脚本。

希望这会有所帮助,我在观看此视频https://youtu.be/UbYt1PokMrM时遇到了这个错误

【讨论】:

以上是关于我正在将 vue 3 与 apollo/client 一起使用,但出现错误的主要内容,如果未能解决你的问题,请参考以下文章

Firebase:Vue.js:无法将存储与数据库连接

如何将按下按钮时的数据添加到 Vue 3 的根目录或组件?

vue.js 如何将 props 与单个文件组件一起使用

Vue 3 Storybook:(PrimeVue)组件不显示

Vue.js 3 - 将组件插入插槽

如果我观看解构的道具,Vue 3 手表将无法工作