Когда их вообще надо использовать ?
Желательно никогда. Только, если в них есть необходимость.
Да и сама дока говорит, что злоупотреблять не стоит. Я подумал, что это как раз-таки мой случай :) К тому же у меня это карточка товара, коих на странице может быть много.
CryNet, ага, и при этом вы используете еще более устаревший подход, работая напрямую с селекторами и вписывая текст в ноду через innerhtml.
У вас есть стейт/хуки. Кто вам мешает брать значения оттуда и подставлять в блок item__price? Реакт сам будет следить за состоянием этого значения и при изменении автоматически обновлять его в дом-дереве.
Если уж взяли реакт, так разберитесь хоть немного. Использовать реакт как замену jquery не стоит.
CryNet, так вы определитель для начала, вам просто надо получить доступ к dom элементу в реакте, но код у вас уже такой есть, или все таки сделать как правильно? Если правильно, тогда переделывайте на нормальный компонентный подход, прокидывайте нужные пропсы в компонент и по клику передавайте что нужно из компонента. А может у вас так и есть, а вы просто по старинке пытаетесь сделать как умеете, но мы то откуда знаем.
Consumer использую т.к. state и функция работающая с ним находиться в компоненте на несколько уровней выше [если что-то не верно - напишите пожалуйста].
Саму функцию addToCard() я фактически полностью показал. Ниже это всё пушиться и добавляется в state:
CryNet, в вашем случае достаточно изменить функцию addToCard, чтобы она принимала не event, а конкретный item.name и item.price. Ну и по хорошему сделать отдельный компонент для карточки товара и передавать в него уже в качестве пропсов item и addToCard функцию
CryNet, да какая разница как вы работаете с css в реакте, в любом случае их не нужно использовать. Если вам по какой-то причине нужно обратиться к dom элементу, например, чтобы сделать фокус на инпуте программно или вам нужен неконтролируемый компонент, то следует использовать ref'ы, во всех остальных случаях вы просто манипулируете стейтом/пропами из компонентов.