Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

166
Vistas
¿Por qué esta transición CSS solo funciona cuando se usa como una función en lugar de un componente?

Tengo una barra lateral simple donde uso transiciones para abrir/cerrar la barra lateral.

Las transiciones funcionan cuando llamo a mi componente Sidebar como una función (sidebar 1 en el ejemplo) .
Las transiciones no funcionan cuando uso el componente Sidebar como componente (sidebar 2 en el ejemplo) .

¿Por qué no funcionan en el ejemplo 2?

 const App = (props) => {
 const [sidebarCollapsed, setSidebarCollapsed] = React.useState(false);

 const Sidebar = ({ bg, ...props }) => {
 const width = sidebarCollapsed ? "0px" : "200px";

 return (
 <div
 style={{
 backgroundColor: bg,
 height: "100px",
 width: width,
 transitionDuration: "500ms"
 }}
 />
 );
 };

 return (
 <div>
 <div>
 {/* Sidebar 1 -> function */}
 {Sidebar({ bg: "blue" })}

 {/* Sidebar 2 -> component */}
 <Sidebar bg="red" />

 <button onClick={() => setSidebarCollapsed(!sidebarCollapsed)}>
 Toggle sidebar
 </button>
 </div>
 </div>
 );
};

ReactDOM.render(<App />, document.getElementById("root"));
 <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>

<div id="root"></div>

almost 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Así funciona el DOM de React, si quieres animarlo, tienes que pasar el prop de lo abierto. Cuando intente pasar un estado de un componente a otro, siempre debe hacerlo a través de los accesorios.

 const Sidebar = ({ bg, open, ...props }) => {
 const width = open ? "0px" : "200px";

 return (
 <div
 style={{
 backgroundColor: bg,
 height: "100px",
 width: width,
 transitionDuration: "500ms"
 }}
 />
 );
 };
const App = (props) => {
 const [sidebarCollapsed, setSidebarCollapsed] = React.useState(false);



 return (
 <div>
 <div>
 {/* Sidebar 1 -> function */}
 {Sidebar({ bg: "blue", open: sidebarCollapsed })}

 {/* Sidebar 2 -> component */}
 <Sidebar bg="red" open={sidebarCollapsed}/>

 <button onClick={() => setSidebarCollapsed(!sidebarCollapsed)}>
 Toggle sidebar
 </button>
 </div>
 </div>
 );
};

ReactDOM.render(<App />, document.getElementById("root"));
 <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>

<div id="root"></div>

almost 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda