2016-09-21 7 views
0

私は材料表を使用しています。列の1つにSelectFieldコンポーネントがあります。これはドロップダウンから選択する項目がほとんどありません。ここではサンプルコード:すべての行のドロップダウンのReactJS - テーブルの行のドロップダウン設定

<TableBody 
     displayRowCheckbox={this.state.showCheckboxes} 
     deselectOnClickaway={this.state.deselectOnClickaway} 
     showRowHover={this.state.showRowHover} 
     stripedRows={this.state.stripedRows} 
     > 
     {tableData.map((row, index) => (
      <TableRow key={index} selected={row.selected}> 
      <TableRowColumn>{index}</TableRowColumn> 
      <TableRowColumn> 
       <SelectField key={index} value={row.clientId} onChange={this.handleRowChange}> 
       {clientsDropdownData.map((row, index) =>(
        <MenuItem key={row.val} value={row.val} primaryText={row.name} /> 

       ))} 
       </SelectField> 
      </TableRowColumn> 
      <TableRowColumn>{row.name}</TableRowColumn> 
      <TableRowColumn>{row.status}</TableRowColumn> 
      </TableRow> 
     ))} 
     </TableBody> 

初期値は、テーブルに供給されたデータからClientID値に基づいて適切に設定されています。選択した行のドロップダウンの変更時に、提供されたデータのclientIdプロパティを変更したい。どうすれば達成できますか?反応はすべて状態に関するものです。しかし、どのように私は複数の動的状態を管理できますか?

これは私がSelectFieldののonChangeために持っているものです。

handleRowChange = (event, index, rowValue) => { 
     //this.setState({rowValue}); how to set state here? 
     tableData[index]['clientId'] = rowValue; //this doesn't work. But this is what I want. I want to update tableData and also update the UI. 
    } 
+0

のような選択肢を使用することができます。 'tableData'はあなたの州の一部ですか? Fluxや他のパターンを使用していますか?詳細をご記入ください。 –

+0

'tableData'は同じjsxファイルのconstです。 'CONSTたtableData = [ { 名: 'ジョン・スミス'、 ステータス: '就業' のclientId:選択された1、 :真、 }、 { 名: 'ランダルホワイト'、 のclientId:2 、 ステータス: '無職' }、...... .... CONST clientsDropdownData = [{ヴァル:1、名称: 'アボット'}、{ ヴァル:2、 名: 'MSD' }、 .. ' 私は磁束を使用していません。それはちょうど反応し、物質的である。 http://www.material-ui.com/#/components/table – Deepak

答えて

0

あなたはあなたの状態で属性tableDataを使用することができます。あなたは(表データと表ビュー)、それを更新したいときは、だけで状態であなたのテーブルのデータを変更することができます。

handleRowChange = (event, index, rowValue) => { 
     let newTableData = this.state.tableData 
     newTableData[index]['clientId'] = rowValue; 
     this.setState({tableData: newTableData}); //New table set and view updated 
    } 

と交換に直接あなたの状態のテーブルを使用します。

{tableData.map((row, index) => (

{this.state.tableData.map((row, index) => (

のリアクト状態が実際にusfeulである理由があると

。あなたはそこに欲しいものを置くことができ、更新するとビューは再描画されます。あなたの状態がより複雑になる場合は、Redux

+0

私は状態にデータを移動しました。 handleRowChangeは今より論理的です。しかし、私はまだ問題があります。 handleRowChangeのインデックスは、SelectFieldの選択項目のインデックスであり、テーブルの選択された行インデックスではありません。したがって、テーブルonTableRowSelectionの別のメソッドを使用し、selectedTableIndexという別の状態を設定しました。今でもうまくいきます!ありがとう:)私は反応するつもりです。 私は質問があります。数百、数千の行があり、行を1つだけ変更すると、テーブル全体のデータを更新するのは意味がありますか?パフォーマンスに影響しませんか? – Deepak

+0

React/Redux状態の大きなオブジェクトのパフォーマンスの問題については、実際にはあまり気にしません。しかし、トピックとその不変性との関係について書かれた多くの記事があります。 Reactは[不変のヘルパー](https://facebook.github.io/react/docs/update.html)を提供します。あなたが再レンダリングを心配している場合、Reactはある状態から別の状態への移行時にHTMLを変更するだけではなく、それらの違いを発見します(https://www.toptal。com/react/managing-view-state-with-react#反応)、それに応じて更新されます。 –

関連する問題