【发布时间】:2017-01-29 13:48:30
【问题描述】:
我正在使用材质 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>
所有行的下拉列表的初始值都根据提供给表的数据中的 clientId 值正确设置。在更改所选行的下拉列表时,我想更改提供的数据的 clientId 属性。我怎样才能实现它? React 是关于状态的。但是如何管理多个动态状态?
这就是我对 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.
}
【问题讨论】:
-
“tableData”是您所在州的一部分吗?您使用的是 Flux 还是其他模式?请提供更多信息。
-
'tableData' 只是同一个 jsx 文件上的一个常量。
const tableData = [ { name: 'John Smith', status: 'Employed', clientId: 1, selected: true, }, { name: 'Randal White', clientId: 2, status: 'Unemployed', }, ...... .... const clientsDropdownData = [{ val: 1,name: 'Abott'}, { val: 2, name: 'MSD' }, ..我没有使用助焊剂。它只是反应和材料-ui。 material-ui.com/#/components/table
标签: reactjs dropdown material-ui