Loving Tina? us on GitHub0.0k

文档

学习

v.Latest
Documentation
自定义查询
目录

对于大多数简单的情况,你应该能够利用Tina客户端生成的查询来进行数据获取:

const myPost = await client.queries.post(
{ relativePath: 'HelloWorld.md' })

在更高级的情况下,你可能希望对底层的GraphQL查询有更多的控制。在这些情况下,你有两个选择:

  • 通过编写自定义查询来扩展自动生成的client.queries
  • 使用client.request,并编写内联查询。

扩展自动生成的client.queries

可以通过向tina/queries目录添加查询来扩展客户端以执行更高级的查询(包括一次查询多个根集合)。在此目录中以gqlgraphql结尾的所有文件都将被添加到客户端中。

Tina生成自定义的GraphQL片段以用于自定义查询,这样当模式更新时查询就不需要更新。

注意:这些片段可以在tina/__generated__/frags.gql中看到

tina/queries/postWithNav.gql的示例:

query postWithNav($relativePath: String!) {
nav(relativePath: "nav.json") {
...NavParts
}
post(relativePath: $relativePath) {
...PostParts
}
}

要在你的GraphQL文件中获得自动补全功能,请添加一个指向tina/__generated__/schema.gqltina/__generated__/frags.gqlgraphql.config.js

注意:片段的命名是使用集合名称(首字母大写)后跟“Parts”

我们在这里使用了PostPartsNavParts片段。对于每个集合,此片段在模式更新时生成并更新。你可以在/tina/__generated__/frags.gql中查看你的模式的任何可用片段。

一旦查询被添加,客户端将更新其类型,以便可以用来请求新的查询。

import { client } from '../[pathToTina]/tina/__generated__/client'
// 使用客户端进行数据获取
// 在这里,它获取一个单独的“post”项目
const myPost = await client.queries.postWithNav({
relativePath: 'HelloWorld.md',
})
console.log(myPost.title)
console.log(myPost.nav.items)

编写内联查询

如果你想完全避免在客户端上使用类型,你也可以使用client.request函数编写一个内联查询。

import { client } from '../[pathToTina]/tina/__generated__/client'
// 使用客户端进行数据获取
// 在这里,它获取一个单独的“post”项目
const myPost = await client.request({
query: `query getPost($relativePath: String!) {
post(relativePath: $relativePath) {
title
body
}
`,
variables: { relativePath: 'hello-world.md' },
})
console.log(myPost.title)

有关编写自定义查询的更多信息,请查看查询参考文档

上次编辑: March 26, 2025