Hoy comencé a aprender ReactJS y después de una hora enfrenté el problema ... Quiero insertar un componente que tiene dos filas dentro de un div en la página. Un ejemplo simplificado de lo que estoy haciendo a continuación.
Tengo un html:
<html>
..
<div id="component-placeholder"></div>
..
</html>
Función de renderizado como esta:
...
render: function() {
return(
<div className="DeadSimpleComponent">
<div className="DeadSimpleComponent__time">10:23:12</div >
<div className="DeadSimpleComponent__date">MONDAY, 2 MARCH 2015</div>
</div>
)
}
....
Y debajo estoy llamando a render:
ReactDOM.render(<DeadSimpleComponent/>, document.getElementById('component-placeholder'));
El HTML generado se ve así:
<html>
..
<div id="component-placeholder">
<div class="DeadSimpleComponent">
<div class="DeadSimpleComponent__time">10:23:12</div>
<div class="DeadSimpleComponent__date">MONDAY, 2 MARCH 2015</div>
</div>
</div>
..
</html>
El problema es que no estoy muy contento de que React me obligue a envolver todo en un div "DeadSimpleComponent". ¿Cuál es la mejor y más sencilla solución, sin manipulaciones DOM explícitas?
ACTUALIZACIÓN 28/7/2017: Los mantenedores de React agregaron esa posibilidad en React 16 Beta 1
Desde React 16.2 , puede hacer esto:
render() {
return (
<>
<ChildA />
<ChildB />
<ChildC />
</>
);
}
javascript
reactjs
Kirill Reznikov
fuente
fuente
Respuestas:
Este requisito se eliminó en la versión React (16.0)] 1 , por lo que ahora puede evitar ese contenedor.
Puede usar React.Fragment para representar una lista de elementos sin crear un nodo principal, ejemplo oficial:
Más aquí: Fragmentos
fuente
Actualización 2017-12-05: React v16.2.0 ahora es totalmente compatible con la representación de fragmentos con soporte mejorado para devolver varios elementos secundarios de un método de representación de componentes sin especificar claves en los elementos secundarios:
Si está utilizando una versión de React anterior a la v16.2.0, también es posible utilizar
<React.Fragment>...</React.Fragment>
en su lugar:Original:
React v16.0 introdujo devolver una matriz de elementos en el método de renderizado sin envolverlo en un div: https://reactjs.org/blog/2017/09/26/react-v16.0.html
Por el momento, se requiere una clave para cada elemento para evitar la advertencia de clave, pero esto podría cambiarse en versiones futuras:
fuente
Puedes usar:
Para obtener más detalles, consulte esta documentación .
fuente
Utilice [], en lugar de () para envolver toda la devolución.
fuente
Creé un componente para envolver componentes secundarios sin un DIV. Se llama envoltorio de sombra: https://www.npmjs.com/package/react-shadow-wrapper
fuente
Esto todavía es necesario , PERO React ahora asegúrese de crear elementos sin crear un elemento DOM adicional.
La envoltura adicional necesaria (normalmente con un padre
div
) porque ReactscreateElement
método requiere untype
parámetro que eseither a tag name string (such as 'div' or 'span'), a React component type (a class or a function)
. Pero esto fue antes de que presentaran ReactFragment
.Referir este NUEVO documento de api para createElement
aquí está el ejemplo oficial, Refer React.Fragment .
fuente
No podrás deshacerte de ese
div
elemento. React.render () necesita devolver un nodo DOM válido.fuente
A continuación, se muestra una forma de renderizar componentes "transculentos":
fuente
También hay una solución. El siguiente código de bloque genera un fragmento sin la necesidad de React.Fragment.
fuente
Sé que esta pregunta ha sido respondida, por supuesto, puede usar React.Fragment que no crea un nodo pero le permite agrupar cosas como un div.
Además, si quieres divertirte, puedes implementar (y aprender muchas cosas) un modo React que elimina los div extra y, para esto, realmente quiero compartir un gran video sobre cómo puedes hacerlo en la base del código de reacción.
https://www.youtube.com/watch?v=aS41Y_eyNrU
Por supuesto, esto no es algo que haría en la práctica, pero es una buena oportunidad de aprendizaje.
fuente