3 回答
TA贡献1874条经验 获得超12个赞
我假设您正在执行某个循环来渲染列表组件内的每个列表行
假设所有项目都在您循环的项目数组中:
{items.map(item => ( <ListRow handleMenuOpen={handleMenuOpen}/> <Menu handleItemDelete={handleItemDelete} item={item} />)}
现在在菜单容器或组件中,您将拥有该项目并将其传递给菜单项
TA贡献1757条经验 获得超7个赞
我以前也遇到过同样的问题。我认为你应该处理子组件中的弹出窗口切换,就像这样。
function Parent() {
function handleDelete(item) {
deleteFunction(item.id)
}
return (
<div>
{[].map((item, index) => {
return (
<ListRowItem key={index} handleDelete={handleDelete} item={item} />
)
})}
</div>
)
}
function ListRowItem({handleDelete, item}) {
const [isMenuOpen, setIsMenuOpen] = useState(false)
const [isModelVisible, setIsModalVisible] = useState(false)
return (
<div>
<Button onClick={isMenuOpen === true ? () => setIsMenuOpen(true) : () => setIsMenuOpen(false)} />
{isModelVisible === true ? <ModalItem /> :null}
{isMenuOpen === true ?
<div>
<MenuItem onClick={() => setIsModalVisible(true)} />
<MenuItem onClick={() => handleDelete(item.id)} />
</div>
: null}
</div>
)
}
TA贡献1805条经验 获得超9个赞
您可能应该只传递handleMenuOpen 函数并依赖于所选元素,然后将其id 存储在itemID 变量中。
const handleMenuOpen = (e) => {
setAnchorEl(e.currentTarget); // for menu placement
setItemID(e.currentTarget.id);
};
<MenuItem onClick={handleMenuOpen} />;
添加回答
举报