2017-05-29 3 views
1

Ich entwickle eine Kontaktanwendung, bei der alle Daten vorübergehend auf der Clientseite gespeichert werden. Ich habe die Tabelle material-ui verwendet, um die Kontakte anzuzeigen.Wie füge ich eine neue Zeile in Material-UI ein?

Screenshot

Wenn rechts unten neuen Kontakt-Button hinzufügen geklickt wird es einen Dialog mit einem Formular darin zeigt. Wenn auf die Schaltfläche Speichern geklickt wird, werden die Daten im Status gespeichert. Aber das Problem, mit dem ich konfrontiert bin, ist, wie man eine neue Zeile in die Tabelle mit den Formulardaten einfügt. Ich suchte danach, aber ich konnte nicht einmal eine einzige Frage in Bezug auf dasselbe finden. Die Schaltfläche zum Hinzufügen neuer Kontakte befindet sich in AddContact Komponente und Tabelle ist in Contacts Komponente, aber beide haben die gleiche Mutterkomponente, die in Main ist. Kurz gesagt, ich kann den neuen Kontakt in der Tabelle nicht anzeigen.

+0

Können Sie uns Komponentenstruktur geben? –

+0

@sudobangbang Ich habe bereits die Struktur der Komponenten in meiner Frage erwähnt. –

Antwort

2

Pflegen Sie eine array in state Variable, wenn Sie auf Senden in Dialog klicken, drücken Sie diese Daten in state array. Verwenden Sie die array die Zeilen dynamisch zu erzeugen, wie folgt aus:

<Table> 
    <TableHeader> 
     <TableRow> 
      /*Define the headers*/ 
     </TableRow> 
    </TableHeader> 
    <TableBody> 
     {this._generateRows()} 
    </TableBody> 
</Table> 

Schreiben Sie die _generateRows Funktion wie diese Zeilen zu generieren:

_generateRows(){ 
    return this.state.data.map(el => { 
    return <TableRow> 
       <TableRowColumn>{el.a}</TableRowColumn> 
       <TableRowColumn>{el.b}</TableRowColumn> 
       <TableRowColumn>{el.c}</TableRowColumn> 
      </TableRow> 
    }) 
} 

Referenz: Material-UI table.

Hinweis: ersetzen el.a, el.b, el.c mit den Originaldaten.

0

Ich sehe, Sie verwenden reagieren. Das bedeutet, wenn Sie eine Liste von Elementen an die Zeilenkomponenten in Ihrer Renderfunktion binden.

{list.map(item => <RowComponent key={item.id}/>)} 

Nun, wenn Sie auf die Schaltfläche klicken alles, was Sie tun müssen, ist push zu dieser Liste und Ihre neue Zeile auf dem Bildschirm wiedergegeben.

+0

Bitte mutieren Sie Statusvariablen nicht direkt, zum Beispiel mit 'push'. Verwenden Sie die ['setState''- (https://facebook.github.io/react/docs/react-component.html#setstate) Komponente oder die Zustandsverwaltungsbibliothek wie [Redux] (http://redux.js.org) für Vermeiden Sie Probleme mit Komponenten, die überhaupt nicht rendern oder mit dem alten Zustand rendern. –

+1

Sie haben Recht. Reagieren funktioniert am besten, wenn Sie das Array neu erstellen. Beim Drücken könnte man also zuerst das Array klonen. mit splice() zum Beispiel, und dann drücken Sie das Element. oder verwenden Sie eine Bibliothek wie Redux, aber Sie sollten auch eine neue Kopie des Arrays erstellen, bevor Sie das Element hinzufügen. Der Änderungsdetektionsmechanismus von React überprüft die Referenz eines gegebenen Objekts, wenn sie gleich ist. React betrachtet es als nicht verändert. – Gerben

Verwandte Themen