2017-05-29 60 views
1

すべてのデータがクライアント側に一時的に保存される連絡先アプリケーションを開発しています。私はコンタクトを表示するためにmaterial-uiテーブルを使用しました。 Material-UIに新しい行を挿入するにはどうすればいいですか?

Screenshot

右下に新しい連絡先]ボタンを追加し

が、それはそれでフォームをダイアログを表示しますクリックします。保存ボタンをクリックすると、その状態でデータが保存されます。しかし、私が直面している問題は、テーブル内にフォームデータを含む新しい行を挿入する方法です。私はそれを探しましたが、同じことについても1つの質問を見つけることはできませんでした。新しい連絡先の追加ボタンは AddContactコンポーネントにあり、テーブルは Contactsコンポーネントにありますが、どちらも同じ親コンポーネントを持っています( Main)。一言で言えば、私は新しい連絡先をテーブルに表示することができません。

+0

コンポーネントの構造を教えてください。 –

+0

@sudobangbang私はすでに私の質問のコンポーネントの構造について述べました。 –

答えて

2

stateの変数にarrayを維持します。ダイアログでサブミットをクリックすると、そのデータがstate arrayにプッシュされます。このように、動的に行を生成するarrayを使用します。

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

行を生成するには、このような_generateRows機能を書く:

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

参考:Material-UI tableを。

注:el.a、el.b、el.cを元のデータに置き換えてください。

0

私はあなたが反応を参照してください参照してください。これは、レンダリング機能の 行コンポーネントにアイテムのリストをバインドした場合に発生します。

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

今、あなたはあなたがしなければならないすべては、このリストにpushであり、あなたの新しい行が画面に描画されるボタンをクリックしたとき。

+0

状態変数を 'push 'などで直接変更しないでください。コンポーネントの['setState'](https://facebook.github.io/react/docs/react-component.html#setstate)または[Redux](http://redux.js.org)のような状態管理ライブラリを使用してコンポーネントをレンダリングしないか、古い状態でレンダリングしても問題が発生しないようにします。 –

+1

あなたは正しいです。 Reactは、配列を再作成すると最も効果的です。だからあなたが最初にアレイをクローンすることができます。たとえばsplice()を使用して項目をプッシュします。 Reduxのようなライブラリを使うこともできますが、アイテムを追加する前に配列の新しいコピーを作成する必要があります。 Reactの変化検出機構は、あるオブジェクトが同じであればその参照をチェックします。Reactはそれが変更されていないとみなします。 – Gerben

関連する問題