Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.3K
Visualizações
¿Cómo hacer un bucle y renderizar elementos en React.js sin una matriz de objetos para mapear?

Estoy tratando de convertir un componente jQuery a React.js y una de las cosas con las que tengo dificultades es representar una cantidad de elementos basados en un bucle for.

Entiendo que esto no es posible o recomendado y que donde existe una matriz en el modelo, tiene mucho sentido usar map . Eso está bien, pero ¿qué pasa cuando no tienes una matriz? En su lugar, tiene un valor numérico que equivale a una cantidad determinada de elementos para representar, entonces, ¿qué debe hacer?

Aquí está mi ejemplo, quiero prefijar un elemento con un número arbitrario de etiquetas de intervalo en función de su nivel jerárquico. Entonces, en el nivel 3, quiero 3 etiquetas de intervalo antes del elemento de texto.

En javascript:

 for (var i = 0; i < level; i++) { $el.append('<span class="indent"></span>'); } $el.append('Some text value');

Parece que no puedo obtener esto, ni nada similar para trabajar en un componente JSX React.js. En cambio, tuve que hacer lo siguiente, primero construir una matriz temporal con la longitud correcta y luego hacer un bucle en la matriz.

Reaccionar.js

 render: function() { var tmp = []; for (var i = 0; i < this.props.level; i++) { tmp.push(i); } var indents = tmp.map(function (i) { return ( <span className='indent'></span> ); }); return ( ... {indents} "Some text value" ... ); }

Seguramente esta no puede ser la mejor, o la única forma de lograrlo. ¿Qué me estoy perdiendo?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Actualizado: a partir de React> 0.16

El método Render no necesariamente tiene que devolver un solo elemento. También se puede devolver una matriz.

 var indents = []; for (var i = 0; i < this.props.level; i++) { indents.push(<span className='indent' key={i}></span>); } return indents;

O

 return this.props.level.map((item, index) => ( <span className="indent" key={index}> {index} </span> ));

Documentos aquí que explican sobre los niños JSX


ANTIGUO:

Puedes usar un bucle en su lugar

 var indents = []; for (var i = 0; i < this.props.level; i++) { indents.push(<span className='indent' key={i}></span>); } return ( <div> {indents} "Some text value" </div> );

También puedes usar .map y fancy es6

 return ( <div> {this.props.level.map((item, index) => ( <span className='indent' key={index} /> ))} "Some text value" </div> );

Además, debe envolver el valor devuelto en un contenedor. Usé div en el ejemplo anterior

Como dicen los documentos aquí

Actualmente, en el renderizado de un componente, solo puede devolver un nodo; si tiene, digamos, una lista de divs para devolver, debe envolver sus componentes dentro de un div, lapso o cualquier otro componente.

over 4 years ago · Santiago Trujillo Relatório

0

Aquí hay un ejemplo más funcional con algunas características de ES6:

 'use strict'; const React = require('react'); function renderArticles(articles) { if (articles.length > 0) { return articles.map((article, index) => ( <Article key={index} article={article} /> )); } else return []; } const Article = ({article}) => { return ( <article key={article.id}> <a href={article.link}>{article.title}</a> <p>{article.description}</p> </article> ); }; const Articles = React.createClass({ render() { const articles = renderArticles(this.props.articles); return ( <section> { articles } </section> ); } }); module.exports = Articles;
over 4 years ago · Santiago Trujillo Relatório

0

Array.from() toma un objeto iterable para convertirlo en una matriz y una función de mapa opcional. Podría crear un objeto con una propiedad .length de la siguiente manera:

 return Array.from({length: this.props.level}, (item, index) => <span className="indent" key={index}></span> );
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda