将图标映射到来自 API 的类别调用 React Typescript 前端
Map Icons to Categories from API Call React Typescript Frontend
我有一个来自 API 电话的类别列表:
Diagnosis
Client Statements
Damages
我需要在前端为收到的每个类别分配一个图标,我认为最好的方法是使用 switch
语句映射类别。
let icon = '';
const handleIcon = () => {
categories.map((cat) => {
switch (cat.categoryName) {
case 'Diagnosis':
icon = 'checklist-24';
break;
case 'Client Statements':
icon = 'document-24';
break;
case 'Damages':
icon = 'car-crash-24'
break;
default:
break;
}
});
};
我的问题是所有类别最终都成为最后一个图标,因为对于我的地图功能它们最终都是真实的。
categories.map((cat) => {
<div>{icon}</div>
<div>{cat.categoryName}</div>
})
如何根据地图中的类别名称分配不同的图标?
谢谢。
这是处理这种情况的正确方法,即当您必须在显示数据之前对数据进行额外操作时:
const cats = [
{ categoryName: 'Diagnosis' },
{ categoryName: 'Client Statements' },
{ categoryName: 'Damages' },
];
export default function App() {
const [categories, setCategories] = useState(cats);
const _categories = useMemo(() => {
return categories.map((cat) => ({
...cat,
icon: getIcon(cat.categoryName),
}));
}, [categories]);
return (
<div>
{_categories.map((cat) => (
<div>
{cat.categoryName}:{cat.icon}
</div>
))}
</div>
);
}
function getIcon(name) {
switch (name) {
case 'Diagnosis':
return 'checklist-24';
case 'Client Statements':
return 'document-24';
case 'Damages':
return 'car-crash-24';
default:
return '';
}
}
通过这种方式,您正在记忆您的操作,这无论如何都是昂贵的,并且如果类别没有改变,您不希望它在每次重新渲染时发生,并且您使用纯函数 getIcon() 将相关图标附加到您的类别对象。你可以附加任何你想要的,甚至是直接显示的 JSX 组件。
测试一下HERE
我有一个来自 API 电话的类别列表:
Diagnosis
Client Statements
Damages
我需要在前端为收到的每个类别分配一个图标,我认为最好的方法是使用 switch
语句映射类别。
let icon = '';
const handleIcon = () => {
categories.map((cat) => {
switch (cat.categoryName) {
case 'Diagnosis':
icon = 'checklist-24';
break;
case 'Client Statements':
icon = 'document-24';
break;
case 'Damages':
icon = 'car-crash-24'
break;
default:
break;
}
});
};
我的问题是所有类别最终都成为最后一个图标,因为对于我的地图功能它们最终都是真实的。
categories.map((cat) => {
<div>{icon}</div>
<div>{cat.categoryName}</div>
})
如何根据地图中的类别名称分配不同的图标?
谢谢。
这是处理这种情况的正确方法,即当您必须在显示数据之前对数据进行额外操作时:
const cats = [
{ categoryName: 'Diagnosis' },
{ categoryName: 'Client Statements' },
{ categoryName: 'Damages' },
];
export default function App() {
const [categories, setCategories] = useState(cats);
const _categories = useMemo(() => {
return categories.map((cat) => ({
...cat,
icon: getIcon(cat.categoryName),
}));
}, [categories]);
return (
<div>
{_categories.map((cat) => (
<div>
{cat.categoryName}:{cat.icon}
</div>
))}
</div>
);
}
function getIcon(name) {
switch (name) {
case 'Diagnosis':
return 'checklist-24';
case 'Client Statements':
return 'document-24';
case 'Damages':
return 'car-crash-24';
default:
return '';
}
}
通过这种方式,您正在记忆您的操作,这无论如何都是昂贵的,并且如果类别没有改变,您不希望它在每次重新渲染时发生,并且您使用纯函数 getIcon() 将相关图标附加到您的类别对象。你可以附加任何你想要的,甚至是直接显示的 JSX 组件。
测试一下HERE