我有一个列表容器组件,它是父组件。它映射出列表行。在列表行组件(即子组件)上,每个项目都有一个用于切换弹出菜单的按钮,该菜单具有一个用于编辑的按钮和一个用于删除的按钮。菜单本身是列表行的同级,因为如果我将其包含在列表行组件中,每一行都会呈现一个菜单,并且在切换时,它们都会堆叠在一起。编辑和删除按钮可以切换编辑表单,也可以直接删除项目。
我目前拥有的是:
// Parent / Container
const [itemID, setItemID] = useState(null);
const handleMenuOpen = (id) => (e) => {
setAnchorEl(e.currentTarget); // for menu placement
setItemID(id);
};
const handleItemDelete = () => {
dispatch(deleteItem(itemID));
};
<List>
<ListRow handleMenuOpen={handleMenuOpen} />
<Menu handleItemDelete={handleItemDelete} itemID={itemID} />
</List>;
// List Row
<Button onClick={handleMenuOpen(item.id)} />;
// Menu
<MenuItem onClick={() => handleModalOpen(itemID)} />;
<MenuItem onClick={() => handleItemDelete()} />;
编辑按钮工作正常,但无论我如何尝试,我都无法通过列表项上的 onClick 使 setItemID 工作。它总是以 null 的初始值出现。我控制台记录了函数参数中的 ID 正确输出,但 setState 挂钩不起作用。
我尝试将 useState 放在列表项上并通过 useContext 传递 ID,但在调用handledItemDelete 时结果未定义。
我尝试在子级上使用 ref 从父级获取 ID,结果也是未定义的。
我想不出如何使用 useEffect 来检查 handleMenuOpen 参数的更改。
我没主意了。有人知道问题是什么以及如何解决它吗?
HUWWW
长风秋雁
Cats萌萌
相关分类