【发布时间】:2019-12-09 20:18:08
【问题描述】:
我正在尝试创建一个以后可以在我的网站上重复使用的组件,例如<TimeToRead id={someId}/>。我的想法是将该 id 进一步向下传递到查询中。
但这不起作用并最终出现在:TypeError: Cannot read property 'edges' of undefined。为什么会这样,我在这里做错了什么?
createPage(... context: id: someId) 在 gatsby-node.js 中是传递参数的唯一方法吗?但这仅适用于模板...
如何将参数传递给组件?
import React from "react"
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"
import { faClock } from "@fortawesome/free-solid-svg-icons"
import { graphql } from "gatsby"
const TimeToRead = ({id}) => {
console.log(id)
return (
<React.Fragment>
<FontAwesomeIcon icon={faClock} /> {timeToReadQuery.allMarkdownRemark.edges.node.timeToRead} ~ min.
</React.Fragment>
)
}
export const timeToReadQuery = graphql`
query timeToReadQuery($id: String!) {
allMarkdownRemark(
filter: { id: { eq: $id } }
) {
edges {
node {
timeToRead
}
}
}
}
`
export default TimeToRead
【问题讨论】:
-
不是 gatsby 用户,所以只是一个假设 based on docs:这是一个静态查询,所以 cannot take variables
-
有open ticket在静态查询中添加变量的支持,仍然开放一年
-
感谢您的回复,但我的查询并不是静态的,据我所知
-
"为了让 Gatsby 以不同的方式处理静态和普通查询,它会在 babel-plugin-remove-graphql-queries 中查找 3 个特定情况:" 以及稍后的 "3. 使用 gql 标记的模板表达式标签”。我相信这正是您在
const timeToReadQuery中所做的