Непоследовательное поведение @link в createSchemaCustomization при использовании JSON импортированных данных - PullRequest
0 голосов
/ 29 января 2020

На моем сайте Gatsby у меня есть серия JSON файлов, которые анализируются gatsby-transformer- json и gatsby-source-filesystem , поэтому я могу запросить их с помощью GraphQL.

Я структурировал данные, чтобы я мог использовать @link для создания внешних ключей между файлами. При локальном запуске это работало и связывало данные только в нескольких строках, но не во всех - несмотря на правильные ключи.

Я переупорядочил файл JSON, и внезапно все строки появились правильно со связанными данными - несмотря на отсутствие изменений данных. Однако при развертывании моего сайта в Netlify проблема возвращается, но в разных строках данных.

Это пример JSON файлов:

// src/data/work.json

[{
  "title": "This is my project title",
  "category: "website",
  "tags": ["html", "css", "javascript"]
}, {
  "title": "This is another project",
  "category: "app",
  "tags": ["php", "mysql"]
}]
// src/data/categories.json

[{
  "id": "website",
  "title": "A Website"
}, {
  "id": "app",
  "title": "A Web-App"
}]
// src/data/tags.json

[{
  "id": "html",
  "title": "HTML Markup"
}, {
  "id": "css",
  "title": "CSS styling"
},
{
  // etc
}]

Мой gatsby-config.js файл:

module.exports = {
  plugins: [
    'gatsby-transformer-json',
    {
      resolve: 'gatsby-source-filesystem',
      options: {
        path: './src/data',
        name: 'data',
      },
    },
  ],
};

И мой gatsby-node.js файл:

exports.createSchemaCustomization = ({ actions }) => {
  const { createTypes } = actions;

  const typeDefs = `
    type WorkJson implements Node {
      category: CategoriesJson @link
      tags: [TagsJson] @link
    }
  `;

  createTypes(typeDefs);
};

Я следую документации относительно этого, но Я не могу понять противоречивое поведение, что может быть его причиной или как его устранить.

1 Ответ

0 голосов
/ 03 февраля 2020

Мне кажется, я решил это. Это нишевая ситуация, но ответ может помочь кому-то в будущем.

Короче говоря, проблема заключается в названии поля "id" в моих. json файлах - поскольку Гэтсби пытается автоматически установить это значение сам, и я могу только предположить, что это иногда вызывает проблемы.

Изменив мои JSON файлы, чтобы использовать другое имя поля для "ID", например:

// src/data/categories.json

[{
  "key": "website",
  "title": "A Website"
}, {
  "key": "app",
  "title": "A Web-App"
}]

И затем обновив мой gatsby-node.js до @ link на основе нового имени поля:

exports.createSchemaCustomization = ({ actions }) => {
  const { createTypes } = actions;

  const typeDefs = `
    type WorkJson implements Node {
      category: CategoriesJson @link(by: "key")
      tags: [TagsJson] @link(by: "key")
    }
  `;

  createTypes(typeDefs);
};

Затем все стало работать так, как ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...