```
## 查询操作
你可以使用 `query` 插槽属性来访问智能查询对象。下面是使用 `fetchMore` 分页数据的示例组件:
```vue
```
在 [API 参考](../../api/smart-query.md#methods) 查看所有可用的智能查询方法。
## 使用片段
片段可用于在其他文档中共享部分 GraphQL 文档,以便一致地检索相同的数据,且无需复制粘贴代码。
假设我们有一个`GetMessages` 查询,带有一个类型是 `Message` 对象数组的 `messages` 字段:
```gql
query GetMessages {
messages {
id
user {
id
name
}
text
created
}
}
```
我们想要将 `messages` 中 `Message` 类型的所有字段提取到一个片段中,以使我们可以在其他地方重复使用它。
首先将 `gql` 标签导入组件:
```js
import gql from 'graphql-tag'
```
然后,在组件定义中,声明一个新的 `fragments` 对象:
```js
export default {
fragments: {
/** TODO */
}
}
```
以下是应用于 `Message` 类型的 `message` 片段,如下所示:
```gql
fragment message on Message {
id
user {
id
name
}
text
created
}
```
我们可以像查询一样使用 `gql` 标签:
```js
export default {
fragments: {
message: gql`
fragment message on Message {
id
user {
id
name
}
text
created
}
`
}
}
```
我们现在可以在组件中使用 `this.$options.fragments.message` 访问该片段。要在我们的 `GetMessages` 查询中使用此片段,我们需要使用 GraphQL 的 `...` 展开运算符,并将片段放在查询旁边:
```js
gql`
query GetMessages {
messages {
...message
}
}
${$options.fragments.message}
`
```
这将有效地生成 GraphQL 文档(你可以在你的 GraphQL API playground 上尝试):
```gql
query GetMessages {
messages {
...message
}
}
fragment message on Message {
id
user {
id
name
}
text
created
}
```
那么这里发生了什么?GraphQL 将找到 `...` 运算符,表明我们将在查询的 `messages` 字段中选择字段。`...` 运算符之后是片段名称 `message`,然后在整个 GraphQL 文档中查找片段。由于我们已经正确定义了片段,因此它能够在查询下面被找到。最后,GraphQL 将复制所有片段内容并用它替换 `...message`。
最后,我们获得最终查询:
```gql
query GetMessages {
messages {
id
user {
id
name
}
text
created
}
}
fragment message on Message {
id
user {
id
name
}
text
created
}
```
这是一个完整的示例组件:
```vue
```
### 重复使用片段
现在我们可以在另一个组件中检索 `message` 片段:
```vue
```