[英]How to retrieve a React component from an object property
我有一個SliderMenu
React 組件,它接收一個包含其元素的數組。 這些元素是對象,它們的屬性之一是將顯示在菜單中的圖標:
function SliderMenu({ options }) {
return (
<>
<Drawer open>
<List>
{options.map((item) => {
const { icon: ItemIcon } = item || {};
return (
<ListItem button key={`menuItem_${item.text.replace(/\s/g, '')}`}>
<ListItemIcon>
<ItemIcon />
</ListItemIcon>
<ListItemText primary={item.text} />
</ListItem>
);
})}
</List>
</Drawer>
</>
);
}
這個組件是從上層組件調用的(因為如果我需要的話,我希望能夠創建多個SliderMenu
),它指定元素數組並將它們作為道具傳遞:
import React from 'react';
import { HomeRoundedIcon } from '@material-ui/icons/HomeRounded';
import SliderMenu from '../../components/SliderMenu';
function MainMenu() {
const menuOptions = [
{
text: 'Home',
icon: HomeRoundedIcon,
},
];
return (
<SliderMenu options={menuOptions} />
);
}
export default MainMenu;
這里的問題是,每當我嘗試此代碼時, ItemIcon
都未定義,並且我收到以下錯誤:
錯誤:元素類型無效:應為字符串(對於內置組件)或類/函數(對於復合組件)但得到:未定義。 您可能忘記從定義組件的文件中導出組件,或者您可能混淆了默認導入和命名導入。
檢查
SliderMenu
的渲染方法。
但是,如果我嘗試:
const menuOptions = [
{
text: 'Home',
icon: <HomeRoundedIcon />,
},
];
ItemIcon
有一個值,我收到以下錯誤:
錯誤:元素類型無效:應為字符串(對於內置組件)或類/函數(對於復合組件)但得到:對象。
檢查
SliderMenu
的渲染方法。
我希望能夠根據上下文使用不同的圖標等指定不同的菜單元素,然后使用通用組件來呈現它並在所有菜單中具有一致的行為。
如何使用圖標組件庫定義對象中的圖標,然后通過props
將其傳遞給SliderMenu
以便它可以呈現它(無需導入所有圖標並進行切換以查看必須呈現哪個圖標) ?
將您的導入更改為默認導入
import HomeRoundedIcon from '@material-ui/icons/HomeRounded'
或使用來自@material-ui/icons
路徑的命名導入
import { HomeRounded as HomeRoundedIcon } from "@material-ui/icons"
您還需要刪除默認分配並有條件地呈現圖標,因為這會在沒有圖標時引發錯誤
const { icon: ItemIcon } = item
{ItemIcon && (
<ListItemIcon>
<ItemIcon />
</ListItemIcon>
)}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.