reactjs - 如何使用 gatsby 将值传递到 GraphQL 查询并做出反应?
问题描述
我正在尝试通过项目 id 使用 graphql 从我的数据库中获取一些东西,但我不确定如何将一个值传递给 graphql 来获取它。
import React from "react"
import { useStaticQuery, graphql } from "gatsby"
const MyCustomComponent = (props) => {
// How do I pass this value
let theValueIWantToPass = 5
// into this query
const data = useStaticQuery(graphql`
query MyQuery {
mongodbItems(id: {eq: "5"}){
id
}
}
`)
return (
<div>
</div>
)
}
export default MyCustomComponent
解决方案
扩展@ehrencrona 的答案。使用 a 而不是标准的公共查询的主要目的staticQuery
是获取静态数据是完全正确的,因此,它们不接受值以及其他限制/差异,例如:
- 页面查询可以接受变量(通过
pageContext
)但只能添加到页面组件 StaticQuery
不接受变量(因此名称为“静态”),但可以在任何组件中使用,包括页面StaticQuery
不适用于原始 React.createElement 调用;请使用 JSX,例如<StaticQuery />
参考:https ://www.gatsbyjs.org/docs/static-query/
然而,由于 React Hooks (since v16.8
) 的出现,它们有一个巨大的好处,而不是页面查询,而且它是使用useStaticQuery
钩子。尽管具有(几乎)与它们相同的限制,但staticQuery
它们具有这些好处。
- 更清洁
- 更具可读性
- 更加雾化
从:
<StaticQuery
query={graphql`
query {
site {
siteMetadata {
title
}
}
}
`}
render={data => (
<header>
<h1>{data.site.siteMetadata.title}</h1>
</header>
)}
/>
至:
const Header = () => {
const { title } = useSiteMetadata()
return (
<header>
<h1>{title}</h1>
</header>
)
}
参考:https ://www.gatsbyjs.org/blog/2019-02-20-introducing-use-static-query/
Gatby 的文档中有关useStaticQuery
hook的更多信息。
对于答案,您应该在那里使用“硬编码”值:
const data = useStaticQuery(graphql`
query MyQuery {
mongodbItems(id: {eq: "5"}){
id
}
}
`)
推荐阅读
- prolog - 如何检查一个术语是否包含变量?
- swift - 使用苹果统一日志os_log时,是否需要使用DispatchQueue.async?
- multithreading - OpenMP 的循环调度如何影响 ccNUMA 的性能?
- android - 在 Dart / Flutter 中将值从 min/max 重新映射到 max/min
- python - 需要有关我现有代码中的功能的帮助
- reactjs - 如何在reactjs中的img标签上显示二进制图像
- html - 如何修复增长的块内的文本
- c# - LINQ 比较属性值不相等的两个列表
- x86 - 用弯路钩住非windows api函数
- git - 我可以配置 git 以便更轻松地从 GitHub 克隆吗?