如何在reactjs中循环设置react-icons
how to set react-icons in loop in reactjs
大家好我的代码有问题
我只想在我的项目中使用 React 图标而不做其他事情
我只是在每个数据中显示图标正在渲染
像这样{<${e.contact.icons}/>
}我在代码中做什么
import { FaBeer, Fa500Px, FaAccusoft } from "react-icons/fa";
// here is data for I want to show
const data = [
{
contact: [
{
title: "contact",
subtitle: "get in touch",
icons:"FaBeer",
},
{
title: "contact",
subtitle: "get in touch",
icons:"Fa500Px",
},
{
title: "contact",
subtitle: "get in touch",
icons:"FaAccusoft",
},
],
},
];
const contact = () => {
return (
<>
{data.map((e, i) => {
return (
<>
<div className="text-area">
<h1 className="title">{e.contact.title}</h1>
<h2 className="subtitle">{e.contact.subtitle}</h2>
<span> {`<${e.contact.icons}/>`} </span>
</div>
</>
);
})}
</>
);
};
export default contact;
{<${e.contact.icons}/>
} 这种类型的方法不起作用 return 在浏览器中像这样外部
<FaBeer/>
<Fa500Px/>
<FaAccusoft/>
这里没有显示图标我应该怎么做
您不能使用字符串来表示 React 组件类型,而是可以使用导入的 ComponentType 本身。
import { FaBeer, Fa500Px, FaAccusoft } from "react-icons/fa";
// here is data for I want to show
const data = [
{
contact: [
{
title: "contact",
subtitle: "get in touch",
icons: FaBeer,
},
{
title: "contact",
subtitle: "get in touch",
icons: Fa500Px,
},
{
title: "contact",
subtitle: "get in touch",
icons: FaAccusoft,
},
],
},
];
const Contact = () => {
return (
<>
{data.map((e, i) => {
const Icon = e.contact.icons;
return (
<>
<div className="text-area">
<h1 className="title">{e.contact.title}</h1>
<h2 className="subtitle">{e.contact.subtitle}</h2>
<span><Icon /></span>
</div>
</>
);
})}
</>
);
};
export default Contact;
请注意 Icon
的渲染方式也发生了变化
您还可以使用 html-react-parser 中的 Parser()。 https://github.com/remarkablemark/html-react-parser
const parse = require('html-react-parser');
{parse(`<${e.contact.icons}/>`)};
我已经得到了这种方法,我设法做到了我想做的事
import React from "react";
import { render } from "react-dom";
import * as FontAwesome from "react-icons/lib/fa";
const Icon = props => {
const { iconName, size, color } = props;
const icon = React.createElement(FontAwesome[iconName]);
return <div style={{ fontSize: size, color: color }}>{icon}</div>;
};
const App = () => {
const iconString = "FaBeer";
const beer = React.createElement(FontAwesome[iconString]);
return (
<div>
<h2>Start editing to see some magic happen {"\u2728"}</h2>
<FontAwesome.FaBeer />
<div style={{ fontSize: 24, color: "orange" }}>{beer}</div>
<Icon iconName={"FaBeer"} size={12} color="orange" />
</div>
);
};
----------
render(<App />, document.getElementById("root"));
https://codesandbox.io/s/o715x22m4z?file=/src/index.js:0-737`enter 代码在这里`
感谢〈Evie.Codes〉。
https://codesandbox.io/s/fervent-goldwasser-y83cn?file=/src/App.js
import { FaBeer, Fa500Px, FaAccusoft } from "react-icons/fa";
// here is data for I want to show
const data = [
{
contact: [
{
title: "contact",
subtitle: "get in touch",
icons: FaBeer
},
{
title: "contact",
subtitle: "get in touch",
icons: Fa500Px
},
{
title: "contact",
subtitle: "get in touch",
icons: FaAccusoft
}
]
}
];
const contact = () => {
return (
<>
{data.map((e, i) => {
return (
<>
{e.contact.map((e, i) => {
return (
<div className="text-area" key={i}>
<h1 className="title">{e.title}</h1>
<h2 className="subtitle">{e.subtitle}</h2>
<span>
<e.icons />
</span>
</div>
);
})}
</>
);
})}
</>
);
};
export default contact;
大家好我的代码有问题
我只想在我的项目中使用 React 图标而不做其他事情
我只是在每个数据中显示图标正在渲染
像这样{<${e.contact.icons}/>
}我在代码中做什么
import { FaBeer, Fa500Px, FaAccusoft } from "react-icons/fa";
// here is data for I want to show
const data = [
{
contact: [
{
title: "contact",
subtitle: "get in touch",
icons:"FaBeer",
},
{
title: "contact",
subtitle: "get in touch",
icons:"Fa500Px",
},
{
title: "contact",
subtitle: "get in touch",
icons:"FaAccusoft",
},
],
},
];
const contact = () => {
return (
<>
{data.map((e, i) => {
return (
<>
<div className="text-area">
<h1 className="title">{e.contact.title}</h1>
<h2 className="subtitle">{e.contact.subtitle}</h2>
<span> {`<${e.contact.icons}/>`} </span>
</div>
</>
);
})}
</>
);
};
export default contact;
{<${e.contact.icons}/>
} 这种类型的方法不起作用 return 在浏览器中像这样外部
<FaBeer/>
<Fa500Px/>
<FaAccusoft/>
这里没有显示图标我应该怎么做
您不能使用字符串来表示 React 组件类型,而是可以使用导入的 ComponentType 本身。
import { FaBeer, Fa500Px, FaAccusoft } from "react-icons/fa";
// here is data for I want to show
const data = [
{
contact: [
{
title: "contact",
subtitle: "get in touch",
icons: FaBeer,
},
{
title: "contact",
subtitle: "get in touch",
icons: Fa500Px,
},
{
title: "contact",
subtitle: "get in touch",
icons: FaAccusoft,
},
],
},
];
const Contact = () => {
return (
<>
{data.map((e, i) => {
const Icon = e.contact.icons;
return (
<>
<div className="text-area">
<h1 className="title">{e.contact.title}</h1>
<h2 className="subtitle">{e.contact.subtitle}</h2>
<span><Icon /></span>
</div>
</>
);
})}
</>
);
};
export default Contact;
请注意 Icon
的渲染方式也发生了变化
您还可以使用 html-react-parser 中的 Parser()。 https://github.com/remarkablemark/html-react-parser
const parse = require('html-react-parser');
{parse(`<${e.contact.icons}/>`)};
我已经得到了这种方法,我设法做到了我想做的事
import React from "react";
import { render } from "react-dom";
import * as FontAwesome from "react-icons/lib/fa";
const Icon = props => {
const { iconName, size, color } = props;
const icon = React.createElement(FontAwesome[iconName]);
return <div style={{ fontSize: size, color: color }}>{icon}</div>;
};
const App = () => {
const iconString = "FaBeer";
const beer = React.createElement(FontAwesome[iconString]);
return (
<div>
<h2>Start editing to see some magic happen {"\u2728"}</h2>
<FontAwesome.FaBeer />
<div style={{ fontSize: 24, color: "orange" }}>{beer}</div>
<Icon iconName={"FaBeer"} size={12} color="orange" />
</div>
);
};
----------
render(<App />, document.getElementById("root"));
https://codesandbox.io/s/o715x22m4z?file=/src/index.js:0-737`enter 代码在这里`
感谢〈Evie.Codes〉。
https://codesandbox.io/s/fervent-goldwasser-y83cn?file=/src/App.js
import { FaBeer, Fa500Px, FaAccusoft } from "react-icons/fa";
// here is data for I want to show
const data = [
{
contact: [
{
title: "contact",
subtitle: "get in touch",
icons: FaBeer
},
{
title: "contact",
subtitle: "get in touch",
icons: Fa500Px
},
{
title: "contact",
subtitle: "get in touch",
icons: FaAccusoft
}
]
}
];
const contact = () => {
return (
<>
{data.map((e, i) => {
return (
<>
{e.contact.map((e, i) => {
return (
<div className="text-area" key={i}>
<h1 className="title">{e.title}</h1>
<h2 className="subtitle">{e.subtitle}</h2>
<span>
<e.icons />
</span>
</div>
);
})}
</>
);
})}
</>
);
};
export default contact;