Добавление и удаления товара по клику на товар React
Доброе время суток!
подмогите справится, не пойму почему код не работает. нужно по клику добавлять, удалять товар в/из корзины. из дочернего компонента приходит сам item, и выбранный товар checked
const [checkedItems, setCheckedItems] = useState([]);
const HandleAddItem=(item, checked)=>{
if(checked){
if(checkedItems.length){
setCheckedItems([...checkedItems, item]);
}else{
setCheckedItems([...checkedItems, checkedItems.filter(n => n.id === item.id)]);
}
}
if(!checked){
setCheckedItems(checkedItems.filter(n => n.id !== item.id));
}
}
Ответы (1 шт):
Автор решения: meine
→ Ссылка
function Item(properties) {
return (
<div
className="item"
onClick={() => {
(properties.checked
? properties.onUncheck
: properties.onCheck)();
}}
>
{properties.label} - {properties.checked ? "Checked" : "Unchecked"}
</div>
);
}
function Items(properties) {
return (
<div className="items">
{properties.items.map((item) => {
return (
<Item
{...item}
key={item.key}
checked={properties.checkedItems.includes(item.key)}
onCheck={() => properties.onCheckItem(item.key)}
onUncheck={() => properties.onUncheckItem(item.key)}
/>
);
})}
</div>
);
}
function Application() {
const [items, setItems] = React.useState(() => {
return Array.from({ length: 10 }).map((_, index) => ({
key: index,
label: `Item-${index}`,
}));
});
const [checkedItems, setCheckedItems] = React.useState([]);
function handleCheckItem(item) {
setCheckedItems((previousState) => {
return [...previousState, item];
});
}
function handleUncheckItem(item) {
setCheckedItems((previousState) => {
return previousState.filter((checkedItem) => {
return checkedItem !== item;
});
});
}
return (
<React.Fragment>
<Items
items={items}
checkedItems={checkedItems}
onCheckItem={handleCheckItem}
onUncheckItem={handleUncheckItem}
/>
</React.Fragment>
);
}