Digamos que eu tenha uma lista de objetos simples na minha this.state.list
que posso usar para renderizar uma lista de filhos. Qual é então a maneira certa de inserir o objeto this.state.list
?
Abaixo está a única maneira que acho que funcionará, porque você não pode alterar o this.state
diretamente conforme mencionado no documento.
this._list.push(newObject):
this.setState({list: this._list});
Isso me parece feio. Existe uma maneira melhor?
javascript
reactjs
Khoi
fonte
fonte
Respostas:
concat
retorna uma nova matriz, então você pode fazeroutra alternativa é o auxiliar de imutabilidade do React
fonte
concat
pega um array, então você vai quererthis.state.list.concat([newObject])
.concat
ele irá envolvê-lo em um array, mas é melhor adicionar o array você mesmo para ser explícito: se você tem[[1,2], [3,4]]
e deseja adicionar[5,6]
como o próximo elemento, você precisa fazer.concat([[5,6]])
outra coisa vai acabar com[[1,2], [3,4], 5, 6]
.Array.concat
certeza é melhor adicionar outra biblioteca.setState () pode ser chamado com uma função como parâmetro:
ou em ES5:
fonte
this.setState((state) => ({ list: state.list.push(newObj) }))
NUMBER
, que será definido nalist
variávelthis.setState((state) => ({ list: [...state.list, newObj] }))
Atualização 2016
Com ES6 você pode usar:
fonte
...[newObject]
é o mesmo que justonewObject
.A partir dos documentos react ( https://facebook.github.io/react/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous ):
Então, você deve fazer isso:
fonte