javascript - 如何在反应盖茨比中映射此 JSON 文件
问题描述
我有这个 JSON 文件,我想在卡片中显示画廊内的信息,我该怎么做?有任何想法吗?非常感谢
[
{
"slug": "camping",
"img": "../assets/images/campingDetails.jpg",
"name": "Camping",
"description": "Acampada, campismo, campamento o el anglicismo camping hacen referencia a la actividad humana que consiste en colocar una vivienda temporal, ya sea portátil o improvisada, en un lugar con el fin de habitarla. También se denomina así al lugar físico donde se realiza esta actividad.",
"gallery" : [
{
"product" : [
{"imageC": "../assets/images/campingDetails.jpg",
"nombrePro": "Horometro",
"descripcionPro": "Marca las horas de uso"
},
{"imageC": "../assets/images/campingDetails.jpg",
"nombrePro": "Plasticos",
"descripcionPro": "Para motos honda desde los años 2008-2011"
}
]
}
]
}
]
这是我在graphql中的查询,返回的信息一切正常,现在我需要映射
detallesCategoriasJson(slug: {eq: camping}) {
nombre
descripcion
img {
childImageSharp {
fluid {
...GatsbyImageSharpFluid
}
}
}
galeria {
producto {
imageC {
id
base
childImageSharp {
fluid {
...GatsbyImageSharpFluid
}
}
}
nombrePro
descripcionPro
}
}
}
`;
现在我想在卡片中显示信息这是我的代码,但我不能,这是我的组件
import React from 'react'
import styled from 'styled-components'
import Layout from '../components/layout'
import Button from '../components/Button'
import { graphql } from 'gatsby';
import Image from 'gatsby-image';
import { Container, Row, Col,Carousel, Card} from 'react-bootstrap'
import Logo from "../assets/images/logoimagen3.png"
import 'bootstrap/dist/css/bootstrap.min.css';
export const query = graphql`
query ($slug : String! ) {
detallesCategoriasJson(slug: {eq: $slug}) {
nombre
descripcion
img {
childImageSharp {
fluid {
...GatsbyImageSharpFluid
}
}
}
galeria {
producto {
imageC {
id
base
childImageSharp {
fluid {
...GatsbyImageSharpFluid
}
}
}
nombrePro
descripcionPro
}
}
}
}
`;
const templateDetalleCat = ({ data }) => {
const tD = data.detallesCategoriasJson;
return (
<Layout>
<Container>
<ProductsHeading> Productos de {tD.nombre} </ProductsHeading>
<Row>
{tD.gallery.product.map(image => (
<Col md={3}>
<Card className="mb-3">
<Image
fluid={image.gallery.product.imageC.childImageSharp.fluid}
alt={image.gallery.product.imageC.base.split('.')[0]}
className="card-img-top"
/>
<Card.Body>
<Card.Title> Hello </Card.Title>
<Card.Text>
<p> Hello </p>
</Card.Text>
<Button target="_blank" href="https://www.google.com.ec" >Comprar</Button>
</Card.Body>
</Card>
</Col>
))}
</Row>
</Container>
</Layout>
)
}
export default templateDetalleCat
希望你能帮助我问候。
解决方案
你的嵌套结构是错误的。在您的循环中,image
, 代表可迭代对象(products
so 的数组,每个循环中的每个产品)。此外,如果gallery
(或galeria
,关于命名的问题仍然存在)是另一个数组,则需要嵌套循环或获取所需的位置。我会假设这是您的第一个位置 ( [0]
) 但您可能需要更改它
import React from 'react'
import styled from 'styled-components'
import Layout from '../components/layout'
import Button from '../components/Button'
import { graphql } from 'gatsby';
import Image from 'gatsby-image';
import { Container, Row, Col,Carousel, Card} from 'react-bootstrap'
import Logo from "../assets/images/logoimagen3.png"
import 'bootstrap/dist/css/bootstrap.min.css';
export const query = graphql`
query ($slug : String! ) {
detallesCategoriasJson(slug: {eq: $slug}) {
nombre
descripcion
img {
childImageSharp {
fluid {
...GatsbyImageSharpFluid
}
}
}
galeria {
producto {
imageC {
id
base
childImageSharp {
fluid {
...GatsbyImageSharpFluid
}
}
}
nombrePro
descripcionPro
}
}
}
}
`;
const templateDetalleCat = ({ data }) => {
const tD = data.detallesCategoriasJson;
return (
<Layout>
<Container>
<ProductsHeading> Productos de {tD.nombre} </ProductsHeading>
<Row>
{tD.galeria[0].product.map(item => (
<Col md={3}>
<Card className="mb-3">
<Image
fluid={item.imageC.childImageSharp.fluid}
alt={item.imageC.base.split('.')[0]}
className="card-img-top"
/>
<Card.Body>
<Card.Title> {item.nombrePro} </Card.Title>
<Card.Text>
<p> {item.descriptionPro} </p>
</Card.Text>
<Button target="_blank" href="https://www.google.com.ec" >Comprar</Button>
</Card.Body>
</Card>
</Col>
))}
</Row>
</Container>
</Layout>
)
}
export default templateDetalleCat
推荐阅读
- javascript - jquery如何找到witch(nth)选项?
- python - 无法提取 SessionId
- c# - 尝试将文件从库添加到主项目时出错?
- android - 使用 Oauth2.0 在 LinkedIn 上分享帖子
- julia - Julia 1.1.1 - 绝对全局变量
- javascript - 如何在 Highcharts 中添加自定义图标作为标记
- python - 我有一个非功能性的 lambda。我如何在本地运行它以找出问题所在?
- arrays - 使用唯一的 Int 仅显示 SwiftUI 中的数组选择
- sql - 用于除法和乘法的 SQL Server 计算列公式
- reactjs - WebChat 中的 BotFramework v4 在消息后显示机器人的名称和用户名