Estoy haciendo un blog con Gatsby y GraphQl pero no encuentro la manera de evitar la duplicación de código en mis consultas. Tengo 3 consultas casi idénticas:
graphql(` { allContentfulRecette { edges { node { id nom } } } } `) graphql` query IndexQuery { posts : allContentfulRecette(sort: {fields: dateDePublication}){ edges { node { id nom } } } } ` graphql` query allRecettesByCategorie($slug: String!) { recettes : allContentfulRecette( sort: {fields: dateDePublication} filter: {categorie: {elemMatch: {slug: {eq: $slug}}}} ) { edges { node { id nom } } } } `Como puede ver, son muy similares, el segundo solo tiene un tipo y el tercero tiene un tipo y un filtro. Mi problema es que tengo mucho más que solo los 2 parámetros 'id' y 'nom', por lo que tener esas 3 solicitudes en diferentes páginas es difícil de mantener cada vez que edito un campo en mi CMS sin encabezado.
Intenté hacer algo como esto, pero recibí este error: "La interpolación de cadenas no está permitida en la etiqueta graphql:"
export const pageQuery = graphql` query IndexQuery { posts : allContentfulRecette(sort: {fields: dateDePublication}){ ${allContentfulRecette} } } `¿Hay alguna forma en que pueda tener los elementos comunes de mi solicitud (todo dentro de los "bordes") en un solo lugar y usarlo en una solicitud diferente?
Creo que estás buscando fragmentos :
GraphQL incluye unidades reutilizables llamadas fragmentos. Los fragmentos le permiten construir conjuntos de campos y luego incluirlos en las consultas donde sea necesario. Aquí hay un ejemplo de cómo podría resolver la situación anterior usando fragmentos: