как зделать что бы children принимал что то от parent
можно ли как то в button передать функцию из контейнера
export const PopupContainer = ({children}) => {
const [isOpen, setIsOpen] = useState(false)
const closePopup = () => {
setIsOpen(false);
}
const openPopup = () => {
setIsOpen(true);
}
return (
{children}
);
}
реализация
<PopupContainer>
<button onClick={openPopup}></button>
</PopupContainer>
Ответы (1 шт):
Автор решения: Юрий Копоть
→ Ссылка
Можно в самом контейнере добавить нужную функциональность. Для этого работайте с React.cloneElement(). Вот тут более подробнее - https://ru.reactjs.org/docs/react-api.html#cloneelement (проверяйте - один или несколько children, можно использовать map т.д. )
В вашем случае примерно так:
const PopupContainer = ({children, props}) => {
const [isOpen, setIsOpen] = React.useState(false)
const closePopup = () => {
setIsOpen(false);
}
const openPopup = () => {
setIsOpen(true);
}
return React.cloneElement(children, {
onClick: () => {
setIsOpen(p => !p);
console.log(isOpen);
}
})
}
const App = () => {
return <PopupContainer>
<button>click me</button>
</PopupContainer>
}