yab*_*ugh 3 reactjs react-icons
我有一个侧边栏组件,其列表项是在地图函数内部生成的(从 api 获取的电影类型)。我希望每种电影类型旁边都有一个不同的图标,但无法找到一种方法来为地图功能的每次运行创建不同的图标。
我的想法是第一:按照我希望显示的顺序制作一个我想要显示的图标的数组。
const icons = [
"AiOutlineHome ",
"FaUserNinja",
"GiSwordman",
"GiBabyFace",
"FaLaughBeam",
"GiPistolGun",
"GiPineTree",
"GiDramaMasks",
"GiFamilyHouse",
"GiElfEar",
"GiScrollUnfurled",
"GiScreaming",
"GiMusicalNotes",
"GiMagnifyingGlass",
"FaRegKissBeam",
"GiMaterialsScience",
"GiHalfDead",
"GiGreatWarTank",
"GiCowboyBoot",
];
Run Code Online (Sandbox Code Playgroud)
然后在我的地图函数中为每个列表项生成不同的图标
{movieGenres.map((genre) => {
return (
<li key={genre.id} className="nav-text">
<button
className="genre-btn"
onClick={() => genreSelectionHandler(genre.id)}
>
*<GENERATE ICON HERE />*
<span className="nav-item-title">{genre.name}</span>
</button>
</li>
);
})}
Run Code Online (Sandbox Code Playgroud)
是否可以务实地创建这样的组件?这样,如果我想要不同的图标,我可以避免单独创建每个列表项。
您只需获取您的流派索引即可获取图标。索引是函数回调的第二个参数map():
{movieGenres.map((genre, idx) => (
<li key={genre.id} className="nav-text">
<button
className="genre-btn"
onClick={() => genreSelectionHandler(genre.id)}
>
<Icon icon={icons[idx]} />
<span className="nav-item-title">{genre.name}</span>
</button>
</li>
))}
Run Code Online (Sandbox Code Playgroud)
该Icon组件将根据您使用的图标类型来呈现图标。
编辑:
当您想要使用时,react-icons您需要导入实际的图标组件,而不仅仅是使用字符串:
import {AiOutlineHome} from "react-icons/ai";
import {FaUserNinja} from "react-icons/fa";
// ....
const icons = [
AiOutlineHome,
FaUserNinja,
// ...
];
Run Code Online (Sandbox Code Playgroud)
并渲染它们:
{movieGenres.map((genre, idx) => {
// must be a capitalized name in order for react to treat it as a component
const Icon = icons[idx];
return (
<li key={genre.id} className="nav-text">
<button
className="genre-btn"
onClick={() => genreSelectionHandler(genre.id)}
>
<Icon />
<span className="nav-item-title">{genre.name}</span>
</button>
</li>
)
})}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10399 次 |
| 最近记录: |