该问题源于 JavaScript 模板字符串误用——在 JSX 中拼接动态 URL 时,错误地使用单引号包裹含 ${id} 的字符串,导致变量未被解析,所有卡片均加载同一静态路径的图片。
该问题源于 javascript 模板字符串误用——在 jsx 中拼接动态 url 时,错误地使用单引号包裹含 `${id}` 的字符串,导致变量未被解析,所有卡片均加载同一静态路径的图片。
在 React 组件中,若需在字符串内嵌入 JavaScript 表达式(如 id 变量),必须使用模板字面量(template literals),即由反引号()包裹的字符串,而非单引号(')或双引号(")。单引号/双引号定义的是普通字符串字面量,其中的${id}` 会被原样视为文本,而非执行变量插值。
例如,原始代码中的这一行:
@@##@@
实际等价于:
'https://robohash.org/${id}&720 *200' // 字符串字面量,${id} 不被解析因此浏览器请求的始终是字面路径 https://robohash.org/$%7Bid%7D&720%20*200(URL 编码后),RoboHash 服务无法识别该非法 ID,故默认返回相同占位图。
✅ 正确写法应使用反引号,并确保 URL 参数格式规范(注意:原示例中 &720 *200 存在空格和非法参数名,建议改为标准尺寸参数如 size=720x200):
import React from 'react';
const Card = ({ name, email, id }) => {
return (
<div className="tc bg-light-green dib br3 ma2 grow bw2 shadow-5">
@@##@@
<div>
<h2>{name}</h2>
<p>{email}</p>
</div>
</div>
);
};
export default Card;? 关键注意事项:
- ✅ 必须使用反引号(`)启用模板字符串;
- ✅ URL 中的查询参数应使用 ? 开头,多个参数用 & 连接,避免空格(如 720 *200 → size=720x200);
- ✅ 建议为 alt 属性提供语义化描述,提升可访问性;
- ✅ 组件名首字母大写(Card 而非 card),符合 React 命名规范,避免 JSX 解析异常。
修复后,每个









