A história é que eu deveria colocar Bob, Sally e Jack em uma caixa. Também posso remover qualquer um da caixa. Quando removido, nenhum slot é deixado.
people = ["Bob", "Sally", "Jack"]
Agora preciso remover, por exemplo, "Bob". A nova matriz seria:
["Sally", "Jack"]
Aqui está o meu componente de reação:
...
getInitialState: function() {
return{
people: [],
}
},
selectPeople(e){
this.setState({people: this.state.people.concat([e.target.value])})
},
removePeople(e){
var array = this.state.people;
var index = array.indexOf(e.target.value); // Let's say it's Bob.
delete array[index];
},
...
Aqui eu mostro um código mínimo, pois há mais (onClick etc). A parte principal é excluir, remover, destruir "Bob" da matriz, mas removePeople()
não está funcionando quando chamado. Alguma ideia? Eu estava olhando para isso, mas posso estar fazendo algo errado, pois estou usando o React.
javascript
arrays
reactjs
Sylar
fonte
fonte
array.splice(array, 1);
Obrigadoarray.splice(array, 1);
? Eu acho que você precisa para editar it..You deve estar usando variáveis diferentes ...setState()
.Ao usar o React, você nunca deve alterar o estado diretamente. Se um objeto (ou
Array
, que também é um objeto) for alterado, você deverá criar uma nova cópia.Outros sugeriram o uso
Array.prototype.splice()
, mas esse método modifica a matriz, portanto, é melhor não usarsplice()
com o React.Mais fácil de usar
Array.prototype.filter()
para criar uma nova matriz:fonte
this.setState(prevState => ({ people: prevState.people.filter(person => person !== e.target.value) }));
this.state.people.filter((_, i) => i !== index)
Aqui está uma pequena variação na resposta de Aleksandr Petrov usando o ES6
fonte
Use
.splice
para remover o item da matriz. Usandodelete
, os índices da matriz não serão alterados, mas o valor do índice específico seráundefined
Sintaxe:
array.splice(start, deleteCount[, item1[, item2[, ...]]])
Editar:
Como apontado por justin-grant , Como regra geral, nunca mude
this.state
diretamente, pois ligarsetState()
depois pode substituir a mutação que você fez. Tratethis.state
como se fosse imutável.A alternativa é criar cópias dos objetos
this.state
e manipular as cópias, atribuindo-as de volta usandosetState()
.Array#map
,Array#filter
etc. podem ser usados.fonte
setState
. Outras respostas têm detalhes sobre como fazer isso.Maneira fácil de excluir o item da matriz de estados em react:
quando qualquer dado é excluído do banco de dados e atualiza a lista sem a API chamar o tempo que você passa o ID excluído para esta função e essa função remove o excluído recuperado da lista
fonte
item.post_id !== deletePostId
Algumas respostas mencionadas usando 'emenda', que fizeram como Chance Smith disse, mutaram a matriz. Eu sugiro que você use a chamada de método 'slice' (o documento para 'slice' está aqui), que faz uma cópia da matriz original.
fonte
É muito simples primeiro você define um valor
Agora,
fonte
Você esqueceu de usar
setState
. Exemplo:Mas é melhor usar
filter
porque não muda a matriz. Exemplo:fonte
Redfer doc para obter mais informações
fonte