reactjs - 为什么 Gatsby 的两个不同布局上的两个 StaticQuery 元素不能具有相同的名称?

标签 reactjs graphql gatsby

例如,如果我有两个布局并且我想使用相同的布局,我需要为每个布局命名不同的 StaticQuery:

layoutA.js

const LayoutA = ({ children }) => (
  <StaticQuery
    query={graphql`
      query SiteTitleQuery {
        site {
          siteMetadata {
            title
          }
        }
      }
    `}

layoutB.js

const LayoutB = ({ children }) => (
  <StaticQuery
    query={graphql`
      query SiteTitleQuery {
        site {
          siteMetadata {
            title
          }
        }
      }
    `}

以上会导致以下错误:

error GraphQL Error There was an error while compiling your site's GraphQL queries. Error: RelayParser: Encountered duplicate defintitions for one or more documents: each document must have a unique name. Duplicated documents: - SiteTitleQuery

在某种程度上,它们是两个不同的 StaticQueries,用于两个不同的页面(布局),并且应该是可以接受的,除非 StaticQueries 可以在页面之间共享。

最佳答案

我个人并不真正关心这个名字,事实上你可以完全省略这个名字, Gatsby 会自己使用一些独特的、随机的名字。如果您选择给它一个名称,则必须给它两个不同的名称,没有解决方法。

但是,您可以使用 StaticQuery 的 Hooks 版本:useStaticQuery

这样你就不会重复。

<小时/>

因此,在新组件中,您可以编写以下内容:

import { useStaticQuery, graphql } from 'gatsby'

function useTitle() {
  const data = useStaticQuery(graphql`
    query {
      site {
        siteMetadata {
          title
        }
      }
    }
  `)

  return data.site.siteMetadata.title
}

export default useTitle

并在您的布局中使用它:

import useTitle from './useTitle'

const LayoutA = ({ children }) => {
  const title = useTitle()

  return <div><h1>{title}</h1>{children}</div>
}

关于reactjs - 为什么 Gatsby 的两个不同布局上的两个 StaticQuery 元素不能具有相同的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55381810/

相关文章:

javascript - 我的 redux-saga 有什么问题

graphql - 如何在 apollo graphql 服务器中创建嵌套解析器

javascript - GatsbyJS 和 Contentful 与 SSR

javascript - Gatsby:单击路由中的 anchor 元素会导致重新渲染

graphql - GraphQL DataLoader 应该将请求包装到数据库还是将请求包装到服务方法?

forms - 在提交表单后执行异步功能

reactjs - EXPO React Native 应用程序无法从 Windows 加载

javascript - React State 在没有明确说明的情况下被重置

java - 缩小 React 错误#310;在 React 中使用 Chrome 通过 Selenium 使用非缩小的开发环境来获取完整错误和其他有用的警告

javascript - 如何使用 React-Apollo 处理 GraphQL 错误?