使用gatsby-plugin-image从GraphQL展示Instagram多图时map报错求助
问题修复方案
错误根源
你对getImage函数的使用不符合设计逻辑:getImage仅用于从单个图片节点中提取适配GatsbyImage组件的图像数据,你传入了allInstagramContent.edges数组路径,它返回的是单个IGatsbyImageData类型对象,不是数组,自然不存在map方法。
除此之外你还存在一处用法不匹配:你使用的是新版GatsbyImage组件,但GraphQL查询中写的是旧版gatsby-image组件对应的fixed字段,会导致组件无法正常渲染。
修正后完整代码
import React from "react" import { GatsbyImage, getImage } from "gatsby-plugin-image" import { useStaticQuery, graphql } from "gatsby" const CapabilityList = () => { const data = useStaticQuery(graphql` query InstagramQuery { allInstagramContent { edges { node { localImage { childImageSharp { // 替换fixed为适配新版GatsbyImage的gatsbyImageData字段 gatsbyImageData(width: 200, height: 200, layout: FIXED) } } } } } } } `) // 直接取edges数组,不要用getImage包裹,加兜底避免无数据时报错 const arrayOfInstaImages = data.allInstagramContent.edges || [] return ( <div style={{ maxWidth: `900px`, marginBottom: `1.45rem`, display: 'flex', gap: '1rem' }}> {arrayOfInstaImages.map((item, i) => { // 对单张图片调用getImage,同时做空值判断避免无图时报错 const image = getImage(item.node.localImage) if (!image) return null return ( <div key={i} style={{ width: "200px", height: "200px" }}> <GatsbyImage image={image} alt="Instagram动态图" /> </div>) })} </div> ) } export default CapabilityList;
补充说明
- 给
GatsbyImage补充了必填的alt属性,符合可访问性规范 - 新增的flex布局gap属性用于控制图片间距,不需要可自行删除
内容的提问来源于stack exchange,提问作者EmFor
相关产品推荐
相关产品推荐

