Привет! Недавно начала работать с реактом, и не совсем понимаю как правильно переиспользовать компоненты.
Допустим у меня есть компонент плюсик, по нажатию на который появляется текст. Я хочу его использовать в 2 местах (пусть в хэдере один, а второй в футере)
и вот я не понимаю, где размещать функционал компоненты?
Вот моя компонента Плюс
export default function Plus({ id, func, className }) {
return (
<span
className={`${className}`}
onClick={() => {
func(id)
}}
/>
)
}
Я создала 2 компоненты в которых использую компоненту Плюс
И в них я помещаю функционал, который по факту одинаков, но дублирую его из за того что мне надо получить место в котором нужно открыть мой плюс.
export default function BurgerNavigation({ items }) {
const AddMenu = (id) => {
const addMenu = document.querySelectorAll('.addNav')
const plusBtn = document.querySelectorAll('.plusBtn')
for (let i = 0; i < addMenu.length; i++) {
if (addMenu[i].classList.contains(
styles.open) && addMenu[i] !== addMenu[id]) {
addMenu[i].classList.remove(
styles.open)
plusBtn[i].classList.remove(styles.minusBtn)
}
}
addMenu[id].classList.toggle(
styles.open)
plusBtn[id].classList.toggle(styles.minusBtn)
}
return (
<div className="menu">
...
<Plus id={element.key} func={AddMenu} className={`${styles.plusBtn} plusBtn`} />
...
</div>
)
}
Вторая компонента
export default function Locations({ items }) {
const AddLocation = (id) => {
const location = document.querySelectorAll('.location')
const plusBtn = document.querySelectorAll('.plusFooter')
for (let i = 0; i < location.length; i++) {
if (location[i].classList.contains(
styles.open) && location[i] !== location[id]) {
location[i].classList.remove(
styles.open)
plusBtn[i].classList.remove(styles.minusBtn)
}
}
location[id].classList.toggle(
styles.open)
plusBtn[id].classList.toggle(styles.minusBtn)
}
return (
<div>
{
items.map((el) => {
return (
<div>
...
<Plus id={el.key} className={`${styles.plusBtn} plusFooter`} func={AddLocation} />
...
</div>
)
})}
</div>
)
}
Посоветуйте, как это делается правильно? Когда есть компонента, функциона у нее такой же, только месторасположение действий разное, то есть нужны разные селекторы.