无法在异步方法中获取查询,无法从外部导入 graphql 查询

Posted

技术标签:

【中文标题】无法在异步方法中获取查询,无法从外部导入 graphql 查询【英文标题】:Cannot fetch query inside async method, cant import graphql queries from outside 【发布时间】:2021-10-24 21:35:24 【问题描述】:

我想从父组件获取属性更改的字符(并且 ofc 使用这些道具),我尝试将 useQuery 放入方法中,并在道具更改时运行此方法但有些东西不起作用,我也想使用 @ 987654321@ 来自 useQuery。

代码如下:

<script lang="ts">
import  ref, defineComponent, watch  from "vue";
import gql from "graphql-tag";
import  useQuery, useLazyQuery, useResult  from "@vue/apollo-composable";

export default defineComponent(
  props: 
    message: [String],
  ,

  setup(props) 
    const pageNumber = ref<number>(1);

    const variables = ref(
      page: pageNumber.value,
      name: props.message,
    );

    const fetchCharacters = async () => 
      const  result, error, loading  = await useLazyQuery(
        gql`
          query getCharacters($page: Int!, $name: String!) 
            characters(page: $page, filter:  name: $name ) 
              info 
                count
                pages
              
              results 
                id
                name
                image
                gender
                species
                episode 
                  episode
                
              
            
            location(id: 1) 
              id
            
            episodesByIds(ids: [1, 2]) 
              id
            
          
        `,
        variables
      );
      const characters = useResult(result);
      console.log(characters);
      return  characters, result, error, loading ;
    ;

    watch(props, (value) => 
      fetchCharacters();
    );

    return ;
  ,
);
</script>

你们有什么想法我可以做到这一点吗?

我收到此错误:

onServerPrefetch is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.

【问题讨论】:

如果您有 2 个不同的问题,请发布 2 个不同的帖子。请为第二个问题再发一篇文章,因为这两个问题似乎不相关 【参考方案1】:

1。无法在异步方法中获取查询

如果您使用的是 async setup(),请确保在第一个 await 语句之前注册生命周期挂钩。

你可以在 async 部分和 useResult 之前加入 useQuery。

2。无法从外部导入 graphql 查询

如果你使用 vue-cli,你可以配置 graphql-tag/loader

module.exports = 
  chainWebpack: config => 
    config.module
      .rule('graphql').test(/\.(graphql|gql)$/).use('graphql-tag/loader').loader('graphql-tag/loader').end();
    /* ...other loader
    config.module
      .rule('svg-sprite').use('svgo-loader').loader('svgo-loader').end();*/
  ,

用法

import userQuery from './user.gql';
const  result  = useQuery(
  userQuery
)

const  result  = useQuery(
  require('./user.gql')
)

【讨论】:

以上是关于无法在异步方法中获取查询,无法从外部导入 graphql 查询的主要内容,如果未能解决你的问题,请参考以下文章

Netezza 从外部文件导入错误:不支持的外部表引用,无法导出形状

导入的异步函数无法正确解析数据

Flash Builder 4.5 - 无法导入外部类?

我无法从Silverlight业务应用程序中的代码中获取查询结果

Tomcat 8 无法使用“|”处理获取请求在查询参数中?

无法在 Codeigniter 中从模型获取查询结果到控制器