6 votes

Autoriser les données GraphQL facultatives dans Gatsby

J'essaye de construire un Type dans mon gatsby-node.js qui supporte une valeur optionnelle. Ce qui, je pense, est fait avec [String!]! .

Comment puis-je charger le nouveau type que j'ai créé à l'intérieur de gatsby-node.js en home.js ?

gatsby-node.js :

const path = require('path');
exports.createSchemaCustomization = ({ actions }) => {
    const { createTypes } = actions;
    const typeDefs = `
        type markdownRemark implements Node {
            frontmatter: Features
        }
        type Features {
            title: [String!]!
            description: [String!]!
        }
    `;
    createTypes(typeDefs);
};

pages/home/home.js :

export const query = graphql`
    query HomeQuery($path: String!) {
        markdownRemark(frontmatter: { path: { eq: $path } }) {
            html
            frontmatter {
                features {
                    title
                    description
                }
            }
        }
    }
`;

home.md :

---
path: "/"
features:
    - title: Barns
      description: Praesent commodo cursus magna vel scelerisque nisl consectetur et. Nullam id dolor id nibh ultricies vehicula ut id elit.
    - title: Private Events
      description: Praesent commodo cursus magna vel scelerisque nisl consectetur et. Nullam id dolor id nibh ultricies vehicula ut id elit.
    - title: Food and Drinks
      description: Praesent commodo cursus magna vel scelerisque nisl consectetur et. Nullam id dolor id nibh ultricies vehicula ut id elit.
    - title: Spa
      description: Praesent commodo cursus magna vel scelerisque nisl consectetur et. Nullam id dolor id nibh ultricies vehicula ut id elit.
---

Cela doit fonctionner de telle sorte que si le features réseau à l'intérieur home.md est vide, alors GraphQL n'envoie pas d'erreur.

S'il vous plaît, ne me dites pas de toujours inclure au moins une valeur dans le tableau, car ce n'est pas pratique, ma solution doit supporter aucune valeur dans mon tableau.

J'ai passé deux heures à parcourir la documentation/les problèmes en rond pour essayer de trouver une solution qui fonctionne, s'il vous plaît, que quelqu'un me sauve !

5voto

JMad Points 344

De la Documents sur GraphQL :

  • String! signifie que le champ est non-nulle ce qui signifie que le service GraphQL promet de toujours vous donner une valeur lorsque vous interrogez ce champ. Dans le langage des types, nous les représentons par un point d'exclamation. .
  • [Episode!]! représente un tableau de Episode objets. Puisqu'il n'est pas non plus annulable, vous pouvez toujours vous attendre à un tableau (avec zéro ou plusieurs éléments) lorsque vous interrogez le champ. Et comme Episode! est également non nullable, vous pouvez toujours vous attendre à ce que chaque élément du tableau soit un Episode objet.

Le point d'exclamation ! en GraphQL signifie non-nulle donc [String!]! signifie qu'il existe un tableau non nul de chaînes de caractères non nulles.

Si vous souhaitez qu'un champ soit facultatif, laissez-le tel quel, sans point d'exclamation. ! . Par exemple [String] signifie que le tableau peut être nul, ou que n'importe laquelle des valeurs de chaîne qu'il contient peut être nulle.

Je ne suis pas non plus sûr que vous vouliez utiliser un tableau en premier lieu, puisque title y description d'une caractéristique devrait sûrement être une simple chaîne de caractères ?

Conformément à la Docs Gatsby je pense que ce que tu cherches est ceci :

const typeDefs = `
    type markdownRemark implements Node {
        // Use custom frontmatter type
        frontmatter: Frontmatter
    }
    // Define custom frontmatter type
    type FrontMatter {
      // Nullable array of Feature elements
      features: [Feature]
    }
    // Feature has nullable fields title and description
    type Feature {
        title: String
        description: String
    }
`;

Cela signifie que la matière première a un champ appelé features qui peut être nulle (facultatif) et, si elle existe, est un tableau de Feature objets. Il peut être vide, mais si un Feature les objets existent, chaque Feature possède un élément nullable (facultatif) title y description champ.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X