Graphql中的动态函数名称



我有以下查询

const COURSES = gql`
query(
$course: Course!
) {
**english**(course: $course) {
transfers(
options: {
desc: ["count_in", "count_out"]
}
) {
school {
address
symbol
tokenType
}
}
}
}
`

请注意第5行以"english"开头,所以假设我有1000门不同的课程,如["english","politics","arts",……第1000门课程(。我如何使这个课程名称动态。我没有开发后端,所以更改模式对我来说不是一个选择。我如何通过使课程名称动态来避免重复。

为了清楚起见,我想把变量名放在第5行的‘english’的位置,这样这行的行为就可以像下面一样

english(course: $course) {
politics(course: $course) {
art(course: $course) {
anyCourseName(course: $course) {

更新:我使用useQuery调用上面的查询,并像下面的一样传递参数$course

useQuery(
COURSES,
{
variables: {
course, //this serves as variable $course in above query
},
}
)
const COURSES = (c) => gql`
query(
$course: Course!
) {
${c}(course: $course) {
transfers(
options: {
desc: ["count_in", "count_out"]
}
) {
school {
address
symbol
tokenType
}
}
}
}
const query = COURSES('art')

您可以简单地这样做:

const course = "english";
const COURSES = gql`
query(
$course: Course!
) {
${course}(course: $course) {
transfers(
options: {
desc: ["count_in", "count_out"]
}
) {
school {
address
symbol
tokenType
}
}
}
}
`

或者,如果您有多个查询:

const courses = [
"english",
"politics",
"art",
"anyCourseName",
];
const queries = courses.reduce((acc, query) => (
acc.concat(`${query}(course: $course) {
transfers(
options: {
desc: ["count_in", "count_out"]
}
) {
school {
address
symbol
tokenType
}
}
}n`)
), "");
console.log(queries);

然后在gql:中使用它

const COURSES = gql`
query(
$course: Course!
)
{
${queries}
}
`;

最新更新