从 Vue 3 组合 api 中的函数内部返回 Apollo useQuery 结果

Vah*_*iri 2 vue.js graphql apollo-client vuejs3 vue-composition-api

我在寻找一种使用Apollo v4Vue 3组合 API将结果从方法内部返回到模板的干净方法时遇到一些问题。

这是我的组件:

export default {
    components: {
        AssetCreationForm,
        MainLayout,
        HeaderLinks,
        LoadingButton,
        DialogModal
    },

    setup() {
        const showNewAssetModal = ref(false);

        const onSubmitAsset = (asset) => {
            // how do I access result outside the handler function
            const { result } = useQuery(gql`
                  query getAssets {
                    assets {
                        id
                        name
                        symbol
                        slug
                        logo
                    }
                  }
                `)
            };
        }

        return {
            showNewAssetModal,
            onSubmitAsset,
        }
    },

}
Run Code Online (Sandbox Code Playgroud)

onSubmitAsset当用户单击页面上的按钮时调用该函数。

如何result从设置函数返回 useQuery 以便能够在模板中访问它?(我不想复制该值)

ton*_*y19 5

您可以移动useQuery()提交方法的外部,如文档中所示。如果您想推迟查询获取直到调用提交方法,您可以通过enabled:false作为选项传递( 的第三个参数useQuery)来禁用自动启动:

export default {
  setup() {
    const fetchEnabled = ref(false)
    const { result } = useQuery(gql`...`, null, { enabled: fetchEnabled })

    const onSubmitAsset = (asset) => {
      fetchEnabled.value = true
    }

    return { result, onSubmitAsset }
  }
}
Run Code Online (Sandbox Code Playgroud)

演示