ReactJS-在表中设置行下拉列表
我正在使用一个材质ui表。其中一列包含SelectField组件,这是一个下拉列表,可供选择的项目很少。此处的示例代码: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
<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,并相应地进行更新。