Как внедрить определенный контекст во все страницы Гэтсби? - PullRequest
0 голосов
/ 16 ноября 2018

Используя gatsby-node.js и createPages Я могу запросить что-то , используя graphql, и создать страницы, используя это что-то в качестве контекста страницы. Таким образом, эти страницы могут использовать это что-то в качестве параметра в своих запросах.

Проблема, с которой я сталкиваюсь, заключается в том, что я не хочу использовать createPages. У меня все в порядке со страницами, которые создаются по умолчанию (из gatsby-plugin-page-creator), я просто хочу, чтобы все они имели что-то из graphql в качестве контекста.

По сути, я хочу, чтобы глобальный контекст (который я получил из gatsby graphql) был доступен для всех страниц.

Есть onCreatePage хук, но, к сожалению, graphql там недоступен согласно https://github.com/gatsbyjs/gatsby/issues/3121#issuecomment-348781341.

1 Ответ

0 голосов
/ 17 ноября 2018

Как насчет этого ... вы можете попробовать использовать onCreateNode () hook вместо этого внутри вашего gatsby-nodejs файла. E.g.:

const allMyPageNodes = [];

exports.onCreateNode = ({ node, actions, getNode }) => {
  const { createNodeField } = actions;
  if(...) { //whatever filtering you need to select JUST pages in your site
    const mySpecialContext = "blah"; //whatever your global context settings are
    createNodeField({ node, name: "myglobal", value: mySpecialContext });
    allMyPageNodes.push(node);
  }
}

`` `

Затем во всех последующих запросах graphql для страниц полезная нагрузка graphql должна заполняться edge.node.fields.myglobal , и вы должны иметь возможность делать с ней все что угодно. Также обратите внимание на https://www.gatsbyjs.org/docs/static-query/ для запроса непосредственно изнутри компонента.

НТН.

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