В вашем Service
компоненте вы используете context.cartItems.some
, чтобы определить, следует ли использовать "inCart" в качестве className
. Это проблема , потому что some()
будет true
, если любой товаров в корзине. Это означает, что каждый <li>
не будет иметь className
или все с использованием «inCart».
Что вам действительно нужно, так это то, находится ли текущий товар в корзине, поэтому я рекомендую следующие изменения:
const Service = (props) => {
const context = useContext(ThemeContext);
const inCart = context.cartItems.find(item => item.id === props.id);
return (
<>
<li className={inCart ? "inCart" : ""}
onClick={() => {
inCart ?
context.removeFromCart(props) :
context.addToCart(props)
}} > {props.name}
</li>
</>
)
}
Это установит <li className="inCart"
только для элементов списка, которые находятся в корзине.
Ваш onClick
также неправильно использует some()
. То, как это написано, всегда будет true
и всегда будет вызывать removeFromCart(props)
. Я изменил его, чтобы он действовал так, как я ожидал, а именно: добавьте его, если элемент отсутствует, и удалите, если он есть.