我有以下查询
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}
}
`;