React 如何在嵌套数据对象中呈现动态图像
React how to render dynamic images inside nested data objects
通过我的 GraphQL 查询中的数据映射后,我可以 console.log()
我想要的数据。但是,嵌套的 .map
函数没有渲染我的 JSX。是否可以在嵌套 .maps
中呈现 JSX?
const NikonGallery = ({ data }) => {
return (
<Layout>
{data.allFiles.nodes.map((item) => {
Object.entries(item).map(([key, value]) => {
value.map((image) => {
console.log("Individual image", image) // Logs show the data I want
return (
<>
<GatsbyImage
image={image.gatsbyImageData}
alt={image.description}
/>
</>
)
})
})
})}
</Layout>
)
}
export default NikonGallery
来自 GraphQL/Contentful 的数据是一个嵌套的对象数组。当我通过 .map
.
调用嵌套对象时,我无法让 JSX 呈现
关于嵌套地图,您需要对 return 每个地图的正确表达式进行一些更改。控制台日志起作用的原因是代码仍在循环;但是,没有表达式是 return 从地图中编辑出来供 React 渲染的。试试这个:
data.allFiles.nodes.map((item) => {
return Object.entries(item).map(([key, value]) => {
return value.map((image) => {
console.log("Individual image", image) // Logs show the data I want
return (
<>
<GatsbyImage
image={image.gatsbyImageData}
alt={image.description}
/>
</>
)
})
})
})}
</Layout>
)
将 Gatsby 图像插件用于此类动态图像时,您应该使用插件提供的getImage()
方法。导入应如下所示:
import { GatsbyImage, getImage } from "gatsby-plugin-image";
在你的案例中的用法是这样的:
value.map((image) => {
const gatsbyImage = getImage(image);
return (
<>
<GatsbyImage
image={gatsbyImage}
alt={image.description}
/>
</>
)
})
通过我的 GraphQL 查询中的数据映射后,我可以 console.log()
我想要的数据。但是,嵌套的 .map
函数没有渲染我的 JSX。是否可以在嵌套 .maps
中呈现 JSX?
const NikonGallery = ({ data }) => {
return (
<Layout>
{data.allFiles.nodes.map((item) => {
Object.entries(item).map(([key, value]) => {
value.map((image) => {
console.log("Individual image", image) // Logs show the data I want
return (
<>
<GatsbyImage
image={image.gatsbyImageData}
alt={image.description}
/>
</>
)
})
})
})}
</Layout>
)
}
export default NikonGallery
来自 GraphQL/Contentful 的数据是一个嵌套的对象数组。当我通过 .map
.
关于嵌套地图,您需要对 return 每个地图的正确表达式进行一些更改。控制台日志起作用的原因是代码仍在循环;但是,没有表达式是 return 从地图中编辑出来供 React 渲染的。试试这个:
data.allFiles.nodes.map((item) => {
return Object.entries(item).map(([key, value]) => {
return value.map((image) => {
console.log("Individual image", image) // Logs show the data I want
return (
<>
<GatsbyImage
image={image.gatsbyImageData}
alt={image.description}
/>
</>
)
})
})
})}
</Layout>
)
将 Gatsby 图像插件用于此类动态图像时,您应该使用插件提供的getImage()
方法。导入应如下所示:
import { GatsbyImage, getImage } from "gatsby-plugin-image";
在你的案例中的用法是这样的:
value.map((image) => {
const gatsbyImage = getImage(image);
return (
<>
<GatsbyImage
image={gatsbyImage}
alt={image.description}
/>
</>
)
})