1 回答
TA贡献2039条经验 获得超7个赞
当您认为只需要返回一个模态Lists而不是将模态附加到每个列表项时,这可以轻松解决。单击列表项时,您可以将所选项目添加到状态并在模态中使用它:
function Lists() {
const { items, dispatch } = useContext(ListsContext);
// Store the selected item instead
const [ selectedItem, setSelectedItem ] = useState();
const deleteItem = item => {
// Make sure your type and your reduce case label match
dispatch({ type: "REMOVE_CATEGORY", id: item.id });
setSelectedItem();
};
return (
<Fragment>
<div>
<h1>Lists</h1>
{items.length ? (
items.map(item => (
<div>
<ListTag
key={item.id}
item={item}
confirm={() => setSelectedItem(item)}
/>
</div>
))
) : (
<p> No Categories, Insert a category </p>
)}
</div>
// Confirm is now at the end of the list
// We pass in the selected item
<Confirm
item={selectedItem}
remove={deleteItem}
cancel={() => setSelectedItem(false)}
/>
</Fragment>
);
}
function ListTag({ item, edit, confirm }) {
return (
<div className="list-tag">
<div className="list-info">
<p>{item.description}</p>
</div>
<div className="config-btn">
<button onClick={confirm}>Remove</button>
</div>
</div>
);
}
function Confirm({ cancel, item, remove }) {
return (
<div>
{item && (
<Modal>
<p>
You are about to permanently delete <strong>{item.name}</strong>{" "}
category. Are you sure you want to do this?
</p>
<button onClick={() => remove(item)}>Remove</button>
<button onClick={cancel}>cancel</button>
</Modal>
)}
</div>
);
}
添加回答
举报