在React中动态加载Material-UI图标

时间:2019-09-17 20:12:53

标签: reactjs webpack material-ui

我正在尝试制作可动态导入请求的Material-UI图标的React组件, 页面加载时。我在这里提出的解决方案有效,但它发出警告 在编译时。此外,它会减慢项目的编译速度。

关于如何正确执行此操作的任何想法? https://github.com/jurepetrovic/ordermanager_demo

主要逻辑可在App.js的第5-10行中找到:

import React, { Component } from 'react';
import BarChartIcon from '@material-ui/icons/BarChart';

const MaterialIcon = ({ icon }) => {

  console.log("icon: " + icon);
  let resolved = require(`@material-ui/icons/${icon}`).default;
  return React.createElement(resolved);
}

class App extends Component {


  render() {

    return (
     <div>

        <MaterialIcon icon={"PowerSettingsNew"} />

     </div>
   );
  }
 }

export default App;

它给出的警告是:

Compile warning

1 个答案:

答案 0 :(得分:0)

我终于找到了解决这个问题的最简单方法:

  1. import包装中的所有材料图标:

    import * as Icons from '@material-ui/icons'
    
  2. 我假设您从api中获取了图标名称,最后您有了类似的内容:

    var iconNamesArray = ["FitnessCenter","LocalDrink","Straighten"]
    
  3. 最后按如下所示加载图标:

    <div className="my-icons-wrapper-css">
      {
        iconNamesArray.map((el,ind)=>{
          let DynamicIcon = Icons[el]
          return(
             <DynamicIcon className="my-icon-css"/>
           );
       })
      }
    </div>
    

您的图标将出现在屏幕上。