Каким способом можно удалить из корзины товары с одинаковым id
Есть два товара id=1, id=2. Сначала добавили по id в корзину через map(), но как удалить по одному при нажатии на кнопку, если есть товары с одинаковым id? Буду признателен за любые идеи.
|
Цитата:
|
добавили три с id=1, а потом нужно удалить один
|
Цитата:
Исключите неоднозначность в идентификаторах и проблема исчезнет. |
Это react:
let initialState = { products: [ {id: 1, name: 'Apple'}, {id: 2, name: 'Orange'} ] }; export const productsReducer = (state = initialState) => { return state; }; const Cart = (props) => { debugger let elementsCart = props.cart.cart.map((c) => { return <div> <h3> <li >{c.name}</li> </h3> <button onClick={() => props.removeFromCart(c.id)}>Remove from cart</button> </div> }); return ( <div> <div><h1>Cart: {" " + props.count}</h1></div> <div>{elementsCart}</div> <div> {props.count === 0 && <div><h3>Nothing added to cart</h3><NavLink to='/market'> <button>Add some at market</button> </NavLink></div>} </div> </div> ) }; const initialState = { cart: [] }; export const cartReducer = (state = initialState, action) => { switch (action.type) { case 'ADD_TO_CART': return { ...state, cart: [...state.cart, action.payload] }; case 'REMOVE_FROM_CART': return { ...state, cart: state.cart.filter(o => o.id !== action.payload) }; default: return state; } }; export const addToCart = (obj) => ({type: 'ADD_TO_CART', payload: obj}); export const removeFromCart = (id) => ({type: 'REMOVE_FROM_CART', payload: id}); |
Цитата:
У вас в кармане паспорт, у него есть серия и номер. Паспорта с такой серией и номером больше ни у кого нет во всей стране. Даже если вы смените паспорт, эта серия и номер более использоваться не будет. Это суть уникальности, ибо было бы странным выставлять колье под ID 15, а спустя время под этим ID детский горшок. Также и на страницах - недопустимо иметь на странице элементы с одинаковыми ID, ибо при обращении по такому ID будет возвращен первый найденный элемент. И не надо искать костылей решения этой проблемы, наведите порядок с идентификацией своих товаров, это единственное и правильное решение. PS. Если все таки нет у товаров одинаковых ID и вы не верно формулируете вопрос, и речь идет о добавлении двух единиц одного и того же товара, то в корзину не товар уже имеющийся в ней должен помещаться, а увеличиваться число выбранных. |
Я пытался изменять id при добавлении в корзину в map(), но мне не удалось..
|
Цитата:
Не в корзине нужно пытаться наводить порядок, наведите порядок в своей базе так, чтобы ID у каждого товара было уникальное. Например, если база это MySQL и подобная, то ID должен храниться в поле с автоинкрементом, иметь первичный ключ. |
Я понял, что они уникальные. Спасибо, вы мне донесли это)
|
Marson,
Как вы решили проблему? |
Часовой пояс GMT +3, время: 19:04. |