Не срабатывает useEffect при обновлении компонента

Сломал уже всю голову, буду рад любым подсказкам. Есть корзина с индикатором(когда в корзине что-то есть - он горит, нету - не горит).

Вот функция добавления товаров в корзину, она находится у родителя, а результат прокидывается в саму корзину пропсами.

const addItem = (item, e) => {
const elem = basketItem.find(i => i.name === item.name);
if (elem) {
  elem.quantity += e;
} else {
  basketItem.push({ ...item, quantity: 1 });
}
setBasketItem([ ...basketItem ]);

}

Вот код корзины

function Basket(props) {  



const toggle = () => setIsOpen(!isOpen);

  const [isOpen, setIsOpen] = useState(false);
  const [sum, setSum] = useState(0);
  const [countItem, setCountItem] = useState(false);

  const checkout = () => {
    alert('Ваш заказ был успешно оформлен, ожидайте доставку! Мы знаем где вы живёте ;)')
  }


  useEffect(() => {
    if (props.basketItem.length > 0) {
      setCountItem(true);
    } else {
      setCountItem(false);
    }  
  })


  let counterClass = countItem ? "counter" : "none"

  function renderItems(arr) {
    
const items =  arr.map((item, i) => {

  if(item.quantity == 0) {
    arr.slice(i, 1);
  } else {
    return ( 
      <div 
          key={i}>
              <Row>
                <Col sm="12">
                  <Card body
                  className="inline">
                    <CardTitle tag="h5"
                    className="lh">
                      {item.name} | Количество: {item.quantity} <br />
                      Цена: {item.price}
                    </CardTitle>
                    <Button color="success"
                    size="sm"
                    className="size"
                    onClick={() => props.addItem(item, 1)}
                    >
                      +1
                    </Button>
                    <Button color="danger"
                    size="sm"
                    className="size"
                    onClick={() => props.addItem(item, -1)}
                    >
                      -1
                    </Button>
                  </Card>
                </Col>
              </Row>
      </div>
  )
  }
    
    
});

return (
    <>
        {items}
    </>
)
}

  const itemsDone = renderItems(props.basketItem)
  
  

  return (
    <>
        <div>
          <img src={basket} className="basket" onClick={toggle} />
          <div className={counterClass}></div>
        </div>
        <Offcanvas toggle={toggle} 
        isOpen={isOpen}
        direction="end"
        scrollable>
          <OffcanvasHeader toggle={toggle}>
            Корзина
          </OffcanvasHeader>
          <OffcanvasBody>
            {itemsDone}
          </OffcanvasBody>
          <h5>Сумма товаров в корзине: {sum}</h5>
          <Button className="checkout"
            color="primary"
            onClick={checkout}>
            Оформить заказ
            </Button>
        </Offcanvas>
    </>
  );
}

Дело в том, что при добавлении товара в корзину, индикатор загорается(добавляется класс counter), но если все товары из корзины удалены, то индикатор так и остается гореть, не тухнет. Не понимаю, как так? В пропсах же приходит пустой массив, карточка с товаром пропадает из корзины, значит компонент перересовывается, но при этом индикатор никуда не уходит. Пробовал в useEffect ставить разные зависимости, от пропсов в том числе, но ничего не помогает.


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