Увеличение счётчика в конкретном элементе (по его id)

Столкнулся с такой проблемой, что при увеличении/уменьшении счётчика (increaseCounter и decreaseCounter), он увеличивается/уменьшается во всех товарах добавленных в корзину сразу. Пробовал метод findIndex() для нахождения конкретного элементов массива, но помогло это только со слайсом удаления.

productSlice.js:

import { createSlice } from "@reduxjs/toolkit";
import products from '../data/products.json'


const productSlice = createSlice({
    name: "product",
    initialState: {
        addedProduct: [],
        products: products,
        value: 1
    },
    reducers: {
        addToBasket: (state, action) => {
            const item = action.payload;
            // Условие проверки на наличие элемента в массиве (чтобы элемент не повторялся)
            if(!state.addedProduct.some(repeat => repeat._id == item._id)) {
                state.addedProduct.push(item)
            }
        },
        deleteInBasket: (state, action) => {
            const index = action.payload._id
            const deleteCurrentIndex = state.addedProduct.findIndex(element => element._id == index)
            if(!deleteCurrentIndex !== -1) {
                state.addedProduct.splice(deleteCurrentIndex, 1)
            }
        },
        increaseCounter: (state, action) => {
            const valIndex = action.payload._id
            const valueId = state.addedProduct.findIndex(element => element._id == valIndex)

            if(!valueId) {
                state.value += 1
            }
        },
        decreaseCounter: (state) => {
            state.value = state.value > 1 ? state.value -= 1 : 1
        }
    }
})


export const productAction = productSlice.actions
export const productReducer = productSlice.reducer

Компонент (корзина) в котором отображаются товары:

import React from 'react'
import { useSelector, useDispatch } from 'react-redux'
import '../index.css'
import { productAction } from '../store/productSlice'


const Basket = () => {
    const basketProducts = useSelector(state => state.product.addedProduct)
    const counter = useSelector(state => state.product.value)
    const dispatch = useDispatch()

    const handleIncrease = (plus) => {
      dispatch(productAction.increaseCounter(plus))
    }

    const handleDecrease = (minus) => {
      dispatch(productAction.decreaseCounter(minus))
    }


    const deleteProduct = (del) => {
      dispatch(productAction.deleteInBasket(del))
    }

  return (
    <div className='product'>
        {basketProducts.map((thisItem) => (
            <div key={thisItem._id} className='product--info'>
                <h2>{thisItem.name}</h2>
                <h3>{thisItem.price}</h3>
                <img src={thisItem.picture} alt="picture" className='product--image'/>
                <span>{thisItem.description}</span>
                <p>{thisItem.category}</p>
                <div className='product--counter'>
                  <button onClick={() => handleIncrease()}>+</button>
                  {counter}
                  <button onClick={() => handleDecrease()}>-</button>
                </div>
                <button onClick={() => deleteProduct(thisItem)}>DELETE</button>
            </div>
        ))}
    </div>
  )
}

export default Basket

Ответы (0 шт):