如何使用 Gatsby Graphql 在组件中使用变量
How to use variables in components with Gatsby Graphql
我在 Wordpress 中使用 gatsby,我有一个组件应该根据变量类别加载一些帖子,我的想法是能够在几个地方使用该组件,但我一直无法找到方法。
这是组件
import * as React from "react"
import { useStaticQuery, graphql, Link } from "gatsby"
import { GatsbyImage, getImage } from "gatsby-plugin-image"
import './styles/bloque1.css';
const Bloque1 = ({Titulo, PostID}) => {
const data = useStaticQuery(graphql`
query {
allWpPost(
limit: 3
filter: {categories: {nodes: {elemMatch: {databaseId: {eq: ${PostID} }}}}}
) {
nodes {
title
slug
date
featuredImage {
node {
sourceUrl
localFile {
childImageSharp {
gatsbyImageData
}
}
}
}
}
}
}
`)
return (
<div className="ct-blq-1">
<h2>{Titulo}</h2>
{data.allWpPost.nodes.map(element =>
<div className="container-img">
<GatsbyImage image={getImage(element.featuredImage.node.localFile)} alt="" className="img"/>
<div className="blq-1-item">
<Link to="https://www.valoraanalitik.com/2022/04/12/j-p-morgan-rebajo-recomendacion-adr-bancolombia/"
rel="bookmark" title={element.title}>
<div className="nota-titulo">
<h3>{element.title}</h3>
</div>
<div className="nota-tiempo">
<time>{element.date}</time>
</div>
</Link>
</div>
</div>)}
</div>
)
}
export default Bloque1
我正在寻找一种在 {databaseId: {eq: ${PostID} }}
中使用 PostID 的方法
const Page = () => (
<section id="page">
<main>
<Bloque1 Titulo="Noticias Destacadas" PostID="2"/>
<Bloque2 />
</main>
</section>
)
您不能在静态查询中使用动态变量(因此得名)。这是一个 known limitation:
useStaticQuery
does not accept variables (hence the name “static”), but can be used in any component, including pages
- Because of how queries currently work in Gatsby, we support only a single instance of
useStaticQuery
in a file
也就是说,根据您要实现的目标,您可以使用 page query or using a template。要在页面查询中使用变量,您需要使用上下文提供它们,而不是像您在生成页面时尝试的那样通过 props
提供。如果您不使用 gatsby-node.js
生成页面,您始终可以获取所有帖子 (allWpPost
) 并使用 JavaScript 和提供的 postID
.
过滤它们
缺少很多实现细节以提供完整的代码段,但您可以根据本教程调整 WordPress 结构:https://www.gatsbyjs.com/docs/creating-and-modifying-pages/
我在 Wordpress 中使用 gatsby,我有一个组件应该根据变量类别加载一些帖子,我的想法是能够在几个地方使用该组件,但我一直无法找到方法。
这是组件
import * as React from "react"
import { useStaticQuery, graphql, Link } from "gatsby"
import { GatsbyImage, getImage } from "gatsby-plugin-image"
import './styles/bloque1.css';
const Bloque1 = ({Titulo, PostID}) => {
const data = useStaticQuery(graphql`
query {
allWpPost(
limit: 3
filter: {categories: {nodes: {elemMatch: {databaseId: {eq: ${PostID} }}}}}
) {
nodes {
title
slug
date
featuredImage {
node {
sourceUrl
localFile {
childImageSharp {
gatsbyImageData
}
}
}
}
}
}
}
`)
return (
<div className="ct-blq-1">
<h2>{Titulo}</h2>
{data.allWpPost.nodes.map(element =>
<div className="container-img">
<GatsbyImage image={getImage(element.featuredImage.node.localFile)} alt="" className="img"/>
<div className="blq-1-item">
<Link to="https://www.valoraanalitik.com/2022/04/12/j-p-morgan-rebajo-recomendacion-adr-bancolombia/"
rel="bookmark" title={element.title}>
<div className="nota-titulo">
<h3>{element.title}</h3>
</div>
<div className="nota-tiempo">
<time>{element.date}</time>
</div>
</Link>
</div>
</div>)}
</div>
)
}
export default Bloque1
我正在寻找一种在 {databaseId: {eq: ${PostID} }}
中使用 PostID 的方法const Page = () => (
<section id="page">
<main>
<Bloque1 Titulo="Noticias Destacadas" PostID="2"/>
<Bloque2 />
</main>
</section>
)
您不能在静态查询中使用动态变量(因此得名)。这是一个 known limitation:
useStaticQuery
does not accept variables (hence the name “static”), but can be used in any component, including pages- Because of how queries currently work in Gatsby, we support only a single instance of
useStaticQuery
in a file
也就是说,根据您要实现的目标,您可以使用 page query or using a template。要在页面查询中使用变量,您需要使用上下文提供它们,而不是像您在生成页面时尝试的那样通过 props
提供。如果您不使用 gatsby-node.js
生成页面,您始终可以获取所有帖子 (allWpPost
) 并使用 JavaScript 和提供的 postID
.
缺少很多实现细节以提供完整的代码段,但您可以根据本教程调整 WordPress 结构:https://www.gatsbyjs.com/docs/creating-and-modifying-pages/