Una sola línea funciona bien
render: function () {
return (
{[1,2,3].map(function (n) {
return <p>{n}</p>
}}
);
}
no para varias líneas
render: function () {
return (
{[1,2,3].map(function (n) {
return (
<h3>Item {n}</h3>
<p>Description {n}</p>
)
}}
);
}
Gracias.

return ("asdf" "asdf");quieresreturn ["asdf", "asdf"];Respuestas:
Intente pensar en las etiquetas como llamadas a funciones (ver documentos ). Entonces el primero se convierte en:
Y el segundo:
Ahora debería quedar claro que el segundo fragmento realmente no tiene sentido (no puede devolver más de un valor en JS). Debe envolverlo en otro elemento (lo más probable es que desee, de esa manera también puede proporcionar una
keypropiedad válida ), o puede usar algo como esto:Con azúcar JSX:
No necesita aplanar la matriz resultante, React lo hará por usted. Vea el siguiente violín http://jsfiddle.net/mEB2V/1/ . Nuevamente: envolver los dos elementos en un div / sección probablemente sea mejor a largo plazo.
fuente
Uncaught Error: Invariant Violation: Product.render(): A valid ReactComponent must be returned. You may have returned undefined, an array or some other invalid object.<div>{ this.props.foos.map(function() { return <Foo /> }) }</div>. Pero larenderfunción del componente no puede devolver esa matriz sin envolverla, por ejemplo, en un div.Parece que la respuesta anterior sobre devolver una matriz ya no se aplica (tal vez desde React ~ 0.9, como escribió @ dogmatic69 en un comentario ).
Los documentos dicen que necesitas devolver un solo nodo:
En muchos casos, simplemente puede envolver las cosas en a
<div>o a<span>.En mi caso, quería devolver varios
<tr>s. Los envolví en una<tbody>- una mesa puede tener varios cuerpos.EDITAR: A partir de React 16.0, la devolución de una matriz aparentemente está permitida nuevamente, siempre que cada elemento tenga
key: https://facebook.github.io/react/blog/2017/09/26/react-v16.0.html # new-render-return-types-fragments-and-stringsEDITAR: React 16.2 le permite rodear una lista de elementos con
<Fragment>…</Fragment>o incluso<>…</>, si lo prefiere a una matriz: https://blog.jmes.tech/react-fragment-and-semantic-html/fuente
<li>? Suponiendo que no puedo simplemente envolverlo todo<ul><li><ul><li>one</li><li>two</li></ul></li>si eso funciona en tu situación. O: ¿Un div de envoltura no sería estrictamente válido, pero tal vez funcione bien en todos los navegadores relevantes? Si lo prueba, avísenos.lien unspanodivno funcionó bien para mí. El div rompió seriamente la renderización y, al menos en mi caso de uso, el intervalo estropeó el CSS. 2 ¢: Intentar devolver varios subconjuntos delis es un olor a código. Estábamos usando aulcomo una especie de menú desplegable, e inicialmente quería que muchos componentes devolvieran "secciones" delis. Al final, fue mejor poner todo el código del menú en un solo componente "anclado" enulque calzar los correos electrónicoslide múltiples fuentes. Creo que también hizo que el modelo mental de la interfaz de usuario fuera un poco más limpio.Desde React v16.0.0 en adelante, es posible Devolver múltiples elementos envolviéndolos dentro de un
ArrayTambién desde React v16.2.0 ,
React Fragmentsse introduce una nueva característica llamada que puede usar para envolver múltiples elementosSegún la documentación:
fuente
Además, es posible que desee devolver varios elementos de la lista en alguna función auxiliar dentro de un componente React. Simplemente devuelva una matriz de nodos html con el
keyatributo:fuente
Puede utilizar
createFragmentaquí.https://facebook.github.io/react/docs/create-fragment.html
(usando la sintaxis ES6 y JSX aquí)
primero tienes que agregar el
react-addons-create-fragmentpaquete:Ventaja sobre la solución de Jan Olaf Krems: reaccionar no se queja de los desaparecidos
keyfuente
Actualizado
Utilice React Fragment. Es sencillo. Enlace a la documentación del fragmento.
Respuesta antigua: obsoleta
Con React> 16 puedes usar react-composite .
Por supuesto, debe instalarse react-composite.
fuente
Es simple por React fragment
<></>yReact.Fragment:fuente