Отправляет ли Gatsby API createPages путь к шаблону? - PullRequest
0 голосов
/ 08 мая 2020

Я следовал этому руководству по Gatsby, чтобы динамически создавать страницы на основе создания файлов уценки моей CMS: https://www.gatsbyjs.org/docs/adding-markdown-pages/

* 1005 file blogTemplate. js получает переменную $path. Я вижу, что функция createPages в gatsby- node.js создает страницу на основе результата своего собственного запроса GraphQL и использует элемент frontmatter «path» для выбора URL-адреса для созданной страницы.

Однако откуда эта созданная страница знает свой собственный путь? Запрос под названием pageQuery в учебнике использует переменную $path для получения собственных данных, но я не вижу, как он получает эту переменную. Заранее благодарим вас за любые объяснения.

Ответы [ 2 ]

1 голос
/ 08 мая 2020

При создании страниц мы можем передать контекст, All context values are made available to a template’s GraphQL queries as arguments prefaced with $

     exports.createPages = async function ({ actions, graphql }) {
  const { data } = await graphql(`
    query {
      allMarkdownRemark {
        edges {
          node {
            fields {
              slug
            }
          }
        }
      }
    }
  `)
  data.allMarkdownRemark.edges.forEach(edge => {
    const slug = edge.node.fields.slug
    actions.createPage({
      path: slug,
      component: require.resolve(`./src/templates/blog-post.js`),
      context: { path: slug }, //here you can pass path through context parameter, the slug can be then accesed under $path variable in the template
    })
  })
}
`

с помощью знака $ мы можем затем получить доступ к значению пути на стороне шаблона

  export const query = graphql`
  query($path: String!) {
    ...
  }
`
0 голосов
/ 08 мая 2020

Graphql использует внутреннее устройство redux, и вся информация, касающаяся создания страниц и путей, обновляется в хранилище redux gatsby, и оттуда запрос graphql выполняется для каждой страницы

Теперь в соответствии с кодом gatsby createPage github комментарий

Данные в «контексте» передаются в GraphQL в качестве потенциальных аргументов при выполнении запроса страницы.

Когда аргументы для GraphQL построены, context объект объединяется с объектом страницы, поэтому и объект страницы и данные контекста доступны в качестве аргументов. Поэтому вам не нужно добавлять страницу «path» в контекст, поскольку она уже доступна в GraphQL. Если контекстное поле дублирует поле, уже используемое объектом страницы, это может нарушить функциональность Gatsby, поэтому этого следует избегать.

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