如何从API为Tailwind卡片添加图片?
解决React组件中API图片加载问题
你不需要修改renderDetail函数来处理图片——这个函数是用来渲染文本字段的,图片可以直接通过api对象的thumbnail属性设置,问题出在你没正确引用API数据,还有语法错误。
具体修改步骤:
- 替换图片的src属性
把原来固定路径的<img>标签,改成直接使用API返回的thumbnail字段:
<img class="rounded-t-lg" src={api.thumbnail} alt={api.title || '产品缩略图'} />
- 必须通过
api.thumbnail访问字段,不能直接写thumbnail(你的代码里少了api.前缀) - 补充
alt属性提升可访问性,用产品标题当替代文本,没有数据时用默认值
修正语法错误
你之前写的<img class="rounded-t-lg" src={thumbnail}" />有两处问题:右侧多了一个冗余双引号,且没有引用api对象。可选:处理图片加载失败的情况
可以添加onError事件,当图片加载失败时显示默认占位图:
<img class="rounded-t-lg" src={api.thumbnail} alt={api.title || '产品缩略图'} onError={(e) => { e.target.src = '/docs/images/blog/image-1.jpg'; // 替换成你的默认图片路径 }} />
修改后的完整组件代码:
const CardApi = ({ api }) => { const renderDetail = (text, field) => <p>{text}: <span className="font-semibold">{api[field] || '-'}</span></p> return ( <div class="max-w-sm bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700"> <a href="#"> <img class="rounded-t-lg" src={api.thumbnail} alt={api.title || '产品缩略图'} onError={(e) => { e.target.src = '/docs/images/blog/image-1.jpg'; }} /> </a> <div class="p-5"> <a href="#"> <h5 class="mb-2 text-2xl font-bold tracking-tight text-gray-900 dark:text-white">{api.title || 'Noteworthy technology acquisitions 2021'}</h5> </a> <p class="mb-3 font-normal text-gray-700 dark:text-gray-400"> {renderDetail('title', 'title')} {renderDetail('brand', 'brand')} {renderDetail('Description', 'description')} {renderDetail('price', 'price')} {renderDetail('rating', 'rating')} </p> <a href="#" class="inline-flex items-center px-3 py-2 text-sm font-medium text-center text-white bg-blue-700 rounded-lg hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800"> Read more <svg aria-hidden="true" class="w-4 h-4 ml-2 -mr-1" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M10.293 3.293a1 1 0 011.414 0l6 6a1 1 0 010 1.414l-6 6a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-4.293-4.293a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg> </a> </div> </div> ) } export default CardApi
另外我顺便把卡片标题改成了用API的title字段,更贴合产品数据,你可以根据需求调整。
内容的提问来源于stack exchange,提问作者user407362
相关产品推荐
相关产品推荐

