gatsbyjs: использовать graphql несколько раз или один раз и передать результаты через контекст? - PullRequest
0 голосов
/ 18 февраля 2019

Используя gatsby-node.js и создавая страницы программно, у меня есть 2 варианта:

  1. Я могу сделать запрос graphql на gatsby-node.js всего, что мне нужно, и затем передать (например) массивкрая с context для различных шаблонов, которые я использую.

Таким образом, шаблону не нужно будет делать еще один graphql запрос снова

Я могу сделать тот же запрос на gatsby-node.js (потому что в любом случае мне нужна информация), но затем я могу просто передать context соответствующую информацию шаблонам, чтобы они могли выполнять другие graphql запросы кполучить нужные данные.

Таким образом, я не передаю тонны данных через контекст (это не так, но это может произойти в конце концов), но вместо этого я повторяю запросы к базе данных.

Что эффективнее?Я вижу, что документы, кажется, предлагают повторить graphql запросы, но я не совсем уверен.

Итак, вопрос в том, есть ли какой-либо недостаток в выполнении набора вызовов graphql в Гэтсби?Или предпочтительнее сделать один вызов и использовать javascript для остальных?

(пример)

export const createPages = ({ graphql, actions }) => {
...
  return graphql(`
    query {
...
  `).then(result => {
...
     result.data.allMarkdownRemark.edges.map(({ node }) => {
      createPage({
        component: path.resolve(`./src/templates/myTemplate.js`),
        context: {
          name: node.name,
          title: node.title,
          date: node.date,
          tags: node.tags,
          html: node.html,
        },
...

и в шаблоне не делать никаких запросов, поскольку необходимыесодержимое в контексте

или наоборот

      createPage({
        component: path.resolve(`./src/templates/myTemplate.js`),
        context: {
          name: node.name,
        },

и в шаблоне сделайте конкретный запрос

  query($name: String) {
    allMarkdownRemark(filter: { name: {eq: $name }}) {
      edges {
        node {
          name
          title
          date
          tags
          html
        }
      }
    }

в моих глазах выполнение этих двух запросов кажется излишним, но, может быть, чрезмерное использование context как-то пагубно?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

FWIW, есть эта проблема Гэтсби

Но действительно полные данные не должны передаваться контекстом на страницу - вы должны передавать только минимально необходимые данные (например, идентификаторы или слагы)) для использования в запросах страниц для получения полных данных.

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

  • Способ запроса данных находится рядом с его компонентом - не нужно переходить назад и вперед между gatsby-node.js и шаблоном, когда что-то требует отладки.
  • Добавление данныхэто проще, так как вам нужно только изменить запрос (против изменения запроса и затем добавить данные в контекст)
0 голосов
/ 18 февраля 2019

В конце концов, я решил оставить минимально возможный запрос в gatsby-node.js и чтобы каждый шаблон выполнял свои запросы, лучше подходящие для того, что ему нужно

...