Antes que nada, es bueno mencionar que soy un poco nuevo en el mundo de las reacciones. Estoy usando Mui con reaccionar. aquí está mi código:
const Search = (props) => { const theme = useTheme(); const isSmall = useMediaQuery(theme.breakpoints.down("sm")); return !isSmall || props.show ? <SearchDiv {...props} /> : null; };como puede ver, es un componente simple que, en determinadas circunstancias, devuelve otro componente personalizado. mi problema es que si no agrego {... props} al componente secundario (SearchDiv), la búsqueda completa del componente no aparecerá. pero si agrego todo funciona bien y no puedo entender por qué? ¿Siempre necesitamos pasar todos los accesorios a cualquier componente secundario?
Busqué en StackOverflow y en Google, pero no encontré algo similar a mi pregunta.
Editar : aquí está el resto del código:
const SearchDiv = styled("div")(({ theme }) => ({ position: "relative", borderRadius: theme.shape.borderRadius, backgroundColor: alpha(theme.palette.common.white, 0.15), "&:hover": { backgroundColor: alpha(theme.palette.common.white, 0.25), }, marginLeft: 0, width: "50%", [theme.breakpoints.up("sm")]: { marginLeft: theme.spacing(1), }, [theme.breakpoints.down("sm")]: { marginLeft: theme.spacing(1), }, })); const Navbar = () => { const [showSearch, setShowSearch] = useState(false); return ( <AppBar> <Toolbar sx={{ display: "flex", justifyContent: "space-between" }}> <Search show={showSearch}> <StyledInputBase placeholder="Search…" inputProps={{ "aria-label": "search" }} /> </Search> <SearchIcon onClick={() => setShowSearch(true)} /> </Toolbar> </AppBar> ); }; export default Navbar;Como referencia, consulte Composición frente a herencia .
Sin pasar accesorios, es decir
<SearchDiv /> su estilo <div> no tiene hijos para representar. Cuando pasa todos los accesorios principales a través de {...props} , eso incluye a los children , el equivalente a...
<SearchDiv children={props.children} show={props.show} />Sin embargo, no recomendaría esto. Una alternativa sería
<SearchDiv> { props.children } </SearchDiv>según la sección de contención de la guía vinculada anteriormente.