Пишу проектик на на laravel+react(inertia). Создал главную страницу. Погодя решил из нее сделать лейаут(шаблон для переиспользования)
export default function MainLayout({children}){
const { props } = usePage();
//стейт для поп-апа
const [isVisiblePopup,setIsVisiblePopup] = useState(false)
const [typePopup,setTypePopup] = useState("")
const [textPopup,setTextPopup] = useState("");
//функция для отображения поп-апа
function showPopup(type,text){
setTypePopup(type)
setTextPopup(text)
setIsVisiblePopup(true)
setTimeout(()=>{
setIsVisiblePopup(false)
},3000)
}
return(
<div className=" flex flex-col justify-between h-screen">
<Header user={props.auth.user.name}/>
<div className="flex h-4/6">
{children({showPopup})}
</div>
<Popup text={textPopup}
isVisible={isVisiblePopup}
type={typePopup}
/>
<Footer/>
</div>
)
}
Как вы можете видеть, здесь есть попап, который тригерится функцией showpopup. Ее я передаю в дочерний элемент.
Использовать его приходится как-то так
export default function BranchPage(){
return(
<MainLayout>
{({showPopup})=>(
<>
<button onClick={()=>showPopup("success","i did it again")}>popup</button>
</>)}
</MainLayout>
)
}
Не уверен что это правильное решение. Как отрефакторить код? Возможно есть стандартное решение моего вопроса от inertia, которого я не увидел? Или штатные средства реакта?