代码之家  ›  专栏  ›  技术社区  ›  Evanss

是否根据数据库提供的名称导入和渲染React组件?

  •  0
  • Evanss  · 技术社区  · 8 年前

    我正在为SVG图标使用React组件,例如:

    const ErrorIcon = props => {
      const { color } = props;
      return (
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 90.206 94.8">
            <path
              d="M55.7 82.9v2.8c0 2.2-1."
              fill={color}
            />
          </svg>
      );
    };
    

    我有一个页面,需要根据来自数据库的ID提供的名称应用图标

    const data = [{ id: "dog", name: "A Dog" }, { id: "cat", name: "A kitty"}]
    

    如果我是基于类名设计样式,那么我可以这样呈现ID:

     const MyComponent = props => {
      return (
        <ul>
          {
            data.map(item=>{
                return(<li className={`Icon Icon--${item.id}`} key={item.id}>{item.name}</li>)
            })
          }
         </ul>
      );
    };
    

    和样式:

    .Icon--dog {
      background: url(dog.jpg);
    }
    

    有没有一种方法可以做到这一点,同时保持我的图标作为React组件?

    1 回复  |  直到 8 年前
        1
  •  0
  •   trixn    8 年前

    您可以创建类型到组件的映射,如下所示:

    import {DogIcon, CatIcon} from './icons';
    
    const iconMap = {
        dog: DogIcon,
        cat: CatIcon,
    };
    

    然后按如下方式渲染:

    const MyComponent ({data}) => (
        <ul>
            {data.map(item => {
                const Icon = iconMap[item.type];
                return (
                    <li>
                        <Icon />
                        {item.name}
                    </li>
                );
            })}
        </ul>
    );
    

    Edit x3ooqjyoyo