首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gatsby尝试使用静态que

Gatsby尝试使用静态que
EN

Stack Overflow用户
提问于 2021-03-31 05:49:12
回答 1查看 199关注 0票数 0

我尝试在Gatsby的react类组件中使用静态查询。

代码语言:javascript
复制
import * as React from "react"
    import '../styles/layout.scss'
    import Layout from '../components/layout'
    import { useStaticQuery, graphql } from 'gatsby'
    import { container } from '../styles/mystyles.module.scss'
    class IndexPage extends React.Component {
        constructor(props) {
            super(props);
        }
        render() {
           return  <Layout>
                <div>
                    <h1 className={container}>hello </h1>
                    <div>This is my container</div>
                </div>
            </Layout>
        }
    }
    const data = useStaticQuery(graphql`
        query HeaderQuery {
          site {
            siteMetadata {
              title
            }
          }
        }
      `)
    
    export default IndexPage

我得到了错误

19:14错误反应钩子"useStaticQuery“不能在顶层调用。React Hooks必须在React函数组件或自定义React Hook函数react-hooks/rules-of-hooks中调用

这是否意味着它是不可能的,它必须是一个功能组件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-31 08:04:43

问题是你试图在“顶层”调用一个函数(在函数外),钩子只有在函数组件内部被调用时才起作用。例如:

代码语言:javascript
复制
const YourComponent = () => {
  const data = useStaticQuery(yourQuery)
}

如果您不想使用函数组件,您仍然可以使用StaticQuery高阶组件:

代码语言:javascript
复制
export default (props) => 
  <StaticQuery query={yourQuery}>
    {({ data }) => <SomeComponent {...data} {...props} />}
  </StaticQuery>

…或者像这样的…

代码语言:javascript
复制
class SomeComponent extends React.Component {
  render() {
    return (
      <StaticQuery query={yourQuery}>
        {({ data }) => <div>{data.site.title}</div>}
      </StaticQuery>
    )
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66878905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档