Ich habe eine einfache Todolist Struktur in den Zustand der Komponente. Dies ist ein Array mit zwei Feldern namens 'content' und einem 'done'. Ich fange Klicken Reihe Artikel mit einem einfachen onClick() Funktion von den Eltern auf TodoItem Childs übergeben (wie Tutorial vorschlagen Reagieren):Wie kann ich den Wert eines Elements in Array ändern, ohne andere in React ändern
render() {
const tthis = this;
var myList = tthis.state.todos.map(function(todo,index){
var myOnCLick = function(){
var newTodo = {content: todo.content, done: !todo.done};
tthis.state.todos[index] = newTodo;
tthis.setState({});
}
return <Todo key={index} todo={todo} onClick={myOnCLick}/>
})
return (
<ul className="list">
{ myList }
</ul>
)
}
Dieser Code funktioniert ohne Probleme, aber ich weiß nicht so gut gefällt. Ich würde eine gute Lösung finden, um den Wert eines einzelnen Elements in einem Array zu ändern. Ich fand, dass in Unveränderlichkeit Helfer von React DOC:
{$ Satz: any} das Ziel vollständig ersetzen.
Und in einer guten Antwort in diesem Forum habe ich ein Beispiel:
this.setState({
todos: update(this.state.todos, {1: {done: {$set: true}}})
Aber ich kann 1 nicht in meinem Fall verwenden. Ich habe Index, der mir den Index der angeklickt Todo in todos Liste gibt.
Möchten Sie, dass ich etwas zu dem oben genannten hinzufüge, oder beantwortet es Ihre Frage? –
Ich habe nie eine Dreipunktsyntax verwendet. Ihre Lösung funktioniert großartig, aber alle li im Listenaufruf werden jedes Mal gerendert :) – user3528466
Die 3-Punkt-Syntax wird als Spread-Operator bezeichnet. Zum Beispiel: 'let cold = ['Herbst', 'Winter']; '' laß warm = ['Frühling', 'Sommer']; '' console.log ([... kalt, ... warm])) '=>' ['Herbst', 'Winter', 'Frühling', 'Sommer'] 'Weitere Informationen finden Sie hier: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Spread_operator –