【问题标题】:i can't setState graphql queries on gatsby js我无法在 gatsby js 上设置状态 graphql 查询
【发布时间】:2019-12-22 02:42:18
【问题描述】:

我尝试使用 GraphQL 获取数据 onClick,但由于某种原因我不能 setState 进行多个查询。它说(加载静态查询)

class Math extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      value: url,
      value2: texts[1],
      value3: queryOne,
    }
  }
  render() {
    return (
        <Sidebar>
          <div
            className="post"
            onClick={() =>
              this.setState({
                value: pablo,
                value2: texts[1],
               value3: queryTwo,
              })
            }
          >
            <img src={pablo} alt="pablo"/>
            <h3>1deg school</h3>
          </div>
          <div
            className="post"
            onClick={() =>
              this.setState({ value: clip, value2: texts[2], value3: queryOne })
            }
          >
            <img src={clip} alt="clip"/>
            <h3>2deg school</h3>
          </div>
        </Sidebar>
        <Content>
          <img src={this.state.value} alt="img"></img>
          <p>{this.state.value2}</p>
          <div className="posts">
            <StaticQuery
              query={queryOne}
              render={data => {
                return (
                  <div>
                    {data.allMarkdownRemark.edges.map(({ node }) => (
                      <Post
                        title={node.frontmatter.title}
                        path={node.frontmatter.path}
                        body={node.excerpt}
                        date={node.frontmatter.date}
                      />
                    ))}
                  </div>
                )
              }}
            />
          </div>
        </Content>
    )
  }
}
const queryOne = graphql`
  query MyQuery {
    allMarkdownRemark {
      edges {
        node {
          frontmatter {
            title
            date
            path
          }
          excerpt
        }
      }
    }
  }
`
const queryTwo = graphql`
  query MyQuery {
    allMarkdownRemark(filter: { fileAbsolutePath: { regex: "/001/" } }) {
      edges {
        node {
          frontmatter {
            titledatepath
          }
          excerpt
        }
      }
    }
  }
`
export default Math

我只能在图像之间切换,它会显示以下警告:

我们找不到变量“value3”的声明,您 作为“查询”道具传递到 声明

【问题讨论】:

    标签: javascript reactjs graphql gatsby


    【解决方案1】:

    我不清楚你到底想做什么,但你不能为静态查询传递变量。它们必须是真正静态的,并且查询直接传递到查询属性中:

    <StaticQuery query={graphql`query MyStaticQuery {...}`} />
    

    通过这种方式,它们可以在开发/构建过程中被发现、提取并转换为静态 json。

    【讨论】:

    • 是的,我想知道如何使用 setState 在查询之间切换……点击
    • 首先,每个文件不能有多个静态查询。这使您可以使用页面查询,您可以使用 graphql 别名执行多个 allMarkdownRemark 请求或将查询结果传递到 createPages API 上的页面上下文
    • 好吧,我会尝试将查询结果传递给页面上下文...非常感谢兄弟!
    猜你喜欢
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2020-10-22
    • 2020-03-23
    • 2020-10-29
    • 2019-03-21
    • 2021-04-27
    • 2022-07-15
    相关资源
    最近更新 更多