tengo la siguiente consulta
const COURSES = gql` query( $course: Course! ) { **english**(course: $course) { transfers( options: { desc: ["count_in", "count_out"] } ) { school { address symbol tokenType } } } } `Tenga en cuenta que la quinta línea comienza con 'inglés', así que digamos que tengo 1000 cursos diferentes como ['inglés', 'política', 'artes', .... 1000º curso). ¿Cómo puedo hacer que el nombre de este curso sea dinámico? No desarrollé el backend, por lo que cambiar el esquema no es una opción para mí. ¿Cómo puedo evitar la duplicación haciendo que el nombre del curso sea dinámico?
Para que quede claro, quiero colocar el nombre de la variable en el lugar de 'inglés' en la línea 5 para que esta línea se comporte como a continuación
english(course: $course) { politics(course: $course) { art(course: $course) { anyCourseName(course: $course) {Actualización: estoy llamando a la consulta anterior usando useQuery y pasando el parámetro $ curso como se muestra a continuación
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')?
Simplemente puedes hacerlo así:
const course = "english"; const COURSES = gql` query( $course: Course! ) { ${course}(course: $course) { transfers( options: { desc: ["count_in", "count_out"] } ) { school { address symbol tokenType } } } } `O si tienes varias consultas:
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);luego úsalo en tu gql:
const COURSES = gql` query( $course: Course! ) { ${queries} } `;