You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React如何根据CMS返回的社媒字符串动态渲染已导入的SVG图标

问题根因
  • 你当前代码里img标签的src属性传入的是{ selectedSocial: "facebook" }格式的对象,并非你预先导入的SVG图标资源,自然无法正常渲染。
  • 导入的facebook、twitter、pinterest图标变量和接口返回的平台字符串没有建立映射关系,无法直接通过字符串匹配到对应的图标资源。
  • 额外冗余问题:外层已经判断过links是数组才会进入渲染逻辑,内层map前的Array.isArray(links)判断完全多余,可以删除,同时列表渲染缺少唯一key属性,会触发React警告。
修复方案

先创建平台名称到图标资源的映射对象,再从映射对象中取值传给img的src属性即可,同时补充alt属性符合网页可访问性规范,也可以加兜底逻辑避免未知平台名称报错。

修复后的完整代码如下:

import React from "react";
import twitter from "../images/socials/twitter.svg";
import pinterest from "../images/socials/pinterest.svg";
import facebook from "../images/socials/facebook.svg";

// 建立平台字符串和导入图标的映射关系
const socialIconMap = {
  twitter,
  pinterest,
  facebook
}

const SocialDivider = ({ links, alignLeft }) => {
  return Array.isArray(links) ? (
    <div className="generic-block-container">
      <div
        className="socials-footer"
        style={{
          justifyContent: alignLeft ? "flex-start" : "",
        }}
      >
        {links.map((link) => {
          const selectedSocial = link.social_media;
          const iconSrc = socialIconMap[selectedSocial];
          // 可选:如果没有匹配到对应图标直接跳过渲染
          if (!iconSrc) return null;

          return (
            <a className="socials-footer__item" href={link.url} key={link.url}>
              <img src={iconSrc} alt={`${selectedSocial}官方账号`} />
            </a>
          );
        })}
      </div>
    </div>
  ) : (
    <></>
  );
};

export default SocialDivider;

内容的提问来源于stack exchange,提问作者Donnie Berry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:45:02