【发布时间】:2021-01-16 04:52:47
【问题描述】:
使用graphql Vue code generator,我们创建了以下返回应用首选项的工作查询:
const { result, loading, error } = useViewerQuery()
const preference = useResult(result, null, (data) => data.viewer.preference)
我们希望在用户在MainLayout.vue 组件中通过身份验证后仅获取一次首选项,因此我们可以使用基于loading 引用的微调器,然后才能以正确的用户语言呈现完整的 UI (来自偏好)。
我们遇到的问题是只有在 MainLayout.vue 设置函数中将 ref isAuthenticated 设置为 true 时才会触发 userViewerQuery。当 loading 和 error 引用在 watchEffect 函数中时,我们似乎无法公开它们。
// MainLayout.vue
<script>
import { defineComponent, watchEffect } from '@vue/composition-api'
import { isAuthenticated } from 'src/store/authStore'
import { useViewerQuery } from 'src/graphql/generated/operations'
export default defineComponent({
setup(_, { root }) {
watchEffect(() => {
if (isAuthenticated.value === true) {
const { result, loading, error } = useViewerQuery()
}
})
return {
isAuthenticated,
loading,
error,
}
},
})
</script>
稍后我们只想使用在Settings.vue 组件中检索到的首选项。因为它们已经被提取,所以偏好的数据应该被缓存并且随时可用:
// Settings.vue
const { result } = useViewerQuery()
const preference = useResult(result, null, (data) => data.viewer.preference)
也许我们以错误的方式处理这个问题。欢迎任何帮助或建议。
【问题讨论】:
标签: javascript typescript vue.js graphql vue-component