【发布时间】:2020-03-12 01:05:33
【问题描述】:
您好,我有以下方案来呈现我的菜单和下拉菜单:
const MenuBar = props => {
const MenuTags = [
{
name: 'home',
redirectTo: '/',
dropdown: {
items: ['one', 'two', 'three'],
},
},
{
name: 'about',
redirectTo: '../about',
dropdown: {
items: ['one', 'two', 'three'],
},
},
{ name: 'not dropdown', redirectTo: '../dashboard' },
{ name: 'not dropdown', redirectTo: '../dashboard/about' },
];
const [visibleMenu, setVisibleMenu] = useState(
MenuTags.reduce((r, e) => ((r[e.name] = false), r), {}),
),
onUpdateVisibility = item => {
const visibleMenuCopy = { ...visibleMenu };
Object.keys(visibleMenuCopy).forEach(
key => (visibleMenuCopy[key] = key == item),
);
setVisibleMenu(visibleMenuCopy);
};
console.log(visibleMenu);
return (
<NavUl isOpen={props.isOpen}>
{MenuTags.map(item => (
<MenuItem
options={item}
visibleMenu={visibleMenu}
onClick={() => onUpdateVisibility(item)}
/>
))}
<li>
<FontAwesomeIcon
onClick={() => props.setOpenBox(!props.isOpen)}
className="searchIcon"
rotation={90}
icon={faSearch}
size="1x"
fixedWidth
color="rgba(0, 0, 0, 0.08);"
/>
</li>
</NavUl>
);
};
基本上在这里我有一个数组,其中有将在我的 li 中呈现的名称以及 redirectLink(用于反应路由器链接)
const MenuItem = props => {
const { name, redirectTo, dropdown } = props.options;
return (
<NavLi>
<Link to={redirectTo}>{name}</Link>
{dropdown && dropdown !== null ? <DropDown {...props} /> : ''}
</NavLi>
);
};
在这里,我基本上渲染了我的菜单项读取,如果下拉变量为真,我将渲染以下组件:
const DropDown = props => {
const { items } = props;
console.log(props.visibleMenu);
return(
<>
{ items && items !== null && props.visibleMenu ?
}
</>
)
};
所以在这里我会检查 jsx 中的一些条件,并使用我的 items 数组中的 .map 来呈现以下组件:
<ul>
<li>
<a>
</li>
</ul>
对于数组中的每一项 好吧,我不知道我的代码是好是坏 如果有人可以帮助我解决这个问题以及如何改进代码
【问题讨论】:
-
你能把问题信息排在总问题的第一位吗?
-
好的,基本上问题是如何在 jsx 中创建条件并映射数组,我还询问了我的代码结构
-
我试图根据每个组件来解释,因为如果我不认为我会很困惑
标签: reactjs