//Home.js import React from "react"; function Header() { return ( <div className="header__search"> <ImageSearchIcon onClick = { Upload_img }/> </div> ); } export default Header; //Upload_img.js import React, {useState} from "react"; import Modal from '@material-ui/core/Modal'; const Upload_img = (props) => { const [open, setOpen] = React.useState(false); const handleOpen = () => { setOpen(true); }; const handleClose = () => { setOpen(false); }; return ( <div> <Modal open={open} onClose={handleClose} ><h1>hello</h1></Modal> </div> ) } export default Upload_imgMe gustaría usar modal como módulo Pero recibo este tipo de error
Error: llamada de enlace no válida. Los ganchos solo se pueden llamar dentro del cuerpo de un componente de función. Esto podría suceder por una de las siguientes razones:
Puede haber varias formas de resolver este problema. Creo que la forma más fácil es mover su estado modal en el componente principal (Encabezado).
//Home.js import React from "react"; function Header() { const [open, setOpen] = React.useState(false); const handleOpen = () => { setOpen(true); }; const handleClose = () => { setOpen(false); }; return ( <div className="header__search"> <ImageSearchIcon onClick={handleOpen}/> <Upload_img open={open} handleOpen={handleOpen} handleClose={handleClose} /> </div> ); } export default Header;Ahora su componente Upload_img será un componente sin estado y se verá así:
//Upload_img.js import React from "react"; import Modal from '@material-ui/core/Modal'; const Upload_img = ({open, handleClose, handleOpen}) => { return ( <div> <Modal open={open} onClose={handleClose} ><h1>hello</h1></Modal> </div> ) } export default Upload_img