从子组件访问父查询对象的最佳实践

时间:2019-12-10 23:13:29

标签: apollo-client vue-apollo

我有一个“事件”页面,该页面运行Apollo查询具有给定ID的事件。有多个子组件使用事件对象来访问各种属性。我正在努力寻找使该对象可用于子组件的最佳模式。我是否希望在仅访问缓存的子组件中有其他查询?或者有没有办法让组件推迟到查询完成。

1 个答案:

答案 0 :(得分:0)

通常,我只从“页面”组件运行查询,并将数据作为道具传递给较低级别​​的组件:

所以我会做类似的事情

/pages/EventPage.vue

<template>
  <div>
    <EventDetails :event="event">
  </div>
</template>

<script>
import EventDetails from '/wherever/my/component/is/EventDetails.vue'
import MY_EVENT_QUERY from '/wherever/my/query/is/EventQuery.gql'

export default {
  apollo: {
    event: {
      query: MY_EVENT_QUERY
    }
  }
}
</script>

/components/EventDetails.vue

<template>
  <div>
    {{event.name}}
  </div>
</template>

<script>
export default {
  props: {
    event: {
      type: Object,
      default: { name: '' }
    }
  }
}
</script>

在少数情况下,我会让子组件获取其自己的数据。我正在考虑一种表单,其中您有一个需要加载下拉列表或其他内容的选择框。但我会一遍又一遍地重新查询同一事件项。