Почему бы тебе не попробовать функциональные компоненты React? Это во-первых.
Во-вторых, попробуй функцию добавления товара сделать немного по-другому.
Пример:
У тебя есть state.
const state = { cart: [], orders: [], modal: {} } // я буду писать, отталкиваясь от объектного React, чтобы было удобнее читать, но если будут ошибки - сори.
/*
cart - массив с корзиной. В ней хранятся все товары.
orders - массив товаров в ассортименте.
*/
Зададим примерную структуру товара:
В товаре будут следующие поля: id, title (название), description (описание), price (цена), pic (изображение).
Теперь выводим товар. Завернем его в некий div.
Распаковываем массив orders.
{ this.state.orders.map((ord, index) => <div onClick={setState(modal = ord)} key={index} className="order">/*тут распихиваешь другие поля (id, price и т.д.)*/</div>)}
Мы присвоили в modal объект order. Теперь просто пропишем условие, что modal будет появляться только тогда, когда он не равен пустому объекту.
{ Object.keys(modal) > 0 && <Modal data={modal} /> }
Смотрим, является ли объект пустым. Если да, то ничего не делаем. Если нет, то отображаем модальное окно.
Резюмируем: в state добавляем массив с товарами. Его потом перебираем через map и при клике меняем состояние modal с пустого объекта на элемент массива товара. Если клик не произошел, то модальное окно отображаться не будет.
Если надо сделать кнопку закрытия модального окна, то при нажатии кнопки можно просто сделать изменение состояние modal на пустой объект и оно будет закрываться.