Eu tenho alguns dados chamados de estações que são uma matriz que contém objetos.
stations : [
{call:'station one',frequency:'000'},
{call:'station two',frequency:'001'}
]
Eu gostaria de renderizar um componente de interface do usuário para cada posição da matriz. Até agora eu posso escrever
var stationsArr = []
for (var i = 0; i < this.data.stations.length; i++) {
stationsArr.push(
<div className="station">
{this.data}
</div>
)
}
E então renderizar
render(){
return (
{stationsArr}
)
}
O problema é que estou imprimindo todos os dados. Em vez disso, quero apenas mostrar uma chave como, {this.data.call}
mas não imprime nada.
Como posso fazer um loop por esses dados e retornar um novo elemento de interface do usuário para cada posição da matriz?
javascript
reactjs
aquele gibbyguy
fonte
fonte
stationsArr
vez destations
dentro darender
função.Respostas:
Você pode mapear a lista de estações para ReactElements.
Com React> = 16, é possível retornar vários elementos do mesmo componente sem a necessidade de um wrapper de elemento html extra. Desde 16.2, existe uma nova sintaxe <> para criar fragmentos. Se isso não funcionar ou não for suportado por seu IDE, você pode usar
<React.Fragment>
. Entre 16.0 e 16.2, você pode usar um polyfill muito simples para fragmentos.Tente o seguinte
Não se esqueça do
key
atributo!https://jsfiddle.net/69z2wepo/14377/
fonte
render
função deve retornar um único elemento.stations.map((station,index) => { })
funciona bem para mimTenho uma resposta que pode ser um pouco menos confusa para iniciantes como eu. Você pode apenas usar
map
dentro do método de renderização de componentes.fonte
key
prop reactjs.org/docs/lists-and-keys.html#keysthis.data
presumivelmente contém todos os dados, então você precisaria fazer algo assim:Ou você pode usar
map
as funções de seta e se estiver usando ES6:fonte
return stations;
( codepen.io/pawelgrzybek/pen/WZEKWj )Existem algumas maneiras que podem ser usadas.
Solução 1
Solução 2
Claro que também existem outras formas disponíveis.
fonte