ReactJS-在表中设置行下拉列表

ReactJS-在表中设置行下拉列表,reactjs,dropdown,material-ui,Reactjs,Dropdown,Material Ui,我正在使用一个材质ui表。其中一列包含SelectField组件,这是一个下拉列表,可供选择的项目很少。此处的示例代码: <TableBody displayRowCheckbox={this.state.showCheckboxes} deselectOnClickaway={this.state.deselectOnClickaway} showRowHover={this.state.showRowHover} stri

我正在使用一个材质ui表。其中一列包含SelectField组件,这是一个下拉列表,可供选择的项目很少。此处的示例代码:

<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>

您可以在您的状态中使用属性
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) => (


这就是React的状态实际上是usfeul的原因。你可以把你想要的任何东西放在那里,当你更新它时,视图将被重新渲染。如果您的州变得更复杂,您可以使用类似于

的替代方案,您可以在您的州中使用属性
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) => (


这就是React的状态实际上是usfeul的原因。你可以把你想要的任何东西放在那里,当你更新它时,视图将被重新渲染。如果您的州变得更复杂,您可以使用类似于

的替代方案“tableData”是您州的一部分吗?你是使用通量还是其他模式?请提供更多信息。“tableData”只是同一jsx文件上的常量<代码>const tableData=[{name:'John Smith',status:'Employed',clientId:1,selected:true,},{name:'Randal White',clientId:2,status:'unemployee',},…..const clientsDropdownData=[{val:1,name:'Abott'},{val:2,name:'MSD'},我没有使用通量。它只是反应和材料ui。“tableData”是您状态的一部分吗?您使用通量还是其他模式?请提供更多信息。“tableData”只是同一jsx文件上的常量。
常量tableData=[{name:'John Smith',status:'Employed',clientId:1,selected:true,},{name:'Randal White',clientId:2,status:'unemployee',},},…..const clientsDropdownData=[{val:1,name:'Abott'},{val:2,name:'MSD'},…
我没有使用通量。它只是反应和材料ui。好的。我已经将数据移动到状态。handleRowChange现在似乎更符合逻辑。但我仍然有一个问题。handleRowChange中的索引是SelectField的选定项的索引,而不是表的选定行索引。因此,我使用了表onTableRowSelection的另一种方法,并设置了另一种称为selectedTableIndex的状态。现在运行良好!谢谢:)我无法做出反应。但我有一个问题。如果我们有成百上千行,并且只更改一行,那么更新整个表的数据有意义吗?不是吗不影响性能?我对处于React/Redux状态的大对象的性能问题不太了解,因为幸运的是我自己没有处理过这些问题。但是有很多文章都是关于这个主题及其与不变性的关系。React提供了一个解决方案。如果您担心重新呈现,React不会仅仅改变HTMLn正在从一个状态转换到另一个状态,并相应地更新。好的。我已将数据移动到状态。HandlerRowChange现在似乎更符合逻辑。但我仍然有一个问题。HandlerRowChange中的索引是SelectField的选定项索引,而不是表的选定行索引。因此,我使用了表onTableRowSelection和设置另一个名为selectedTableIndex的状态。现在可以正常工作了!谢谢:)我无法做出反应。但我有一个问题。如果我们有成百上千行,并且只更改一行,那么更新整个表的数据有意义吗?这不会影响性能吗?我对React/R中的大对象的性能问题不太了解edux状态,因为幸运的是我自己没有处理它们。但是有很多关于这个主题及其与不变性的关系的文章。React提供了一个。如果您担心重新呈现,React将不仅仅在从一个状态转换到另一个状态时更改HTML,并相应地进行更新。