Чтобы отслеживать новые / обновленные значения, вы можете рассмотреть следующий подход:
1) ввести состояние rowsChanges
и установить его пустым, чтобы отслеживать новые / обновленные значения в таблице компонент
2) после изменения значения в текстовом поле сохраните его значение вместе с именем поля и индексом строки в rowsChanges
состоянии:
handleTextFieldChange(rowIndex,change) {
this.setState(prevState => ({
rowsChanges: {
...prevState.rowsChanges,
[rowIndex]: {...prevState.rowsChanges[rowIndex],[change.fieldName]: change.fieldValue}
}
}));
}
где
<EditableTableCell
row={row}
fieldName="name"
onCellValueChange={this.handleTextFieldChange.bind(this,index)}
/>
, где EditableTableCell - это пользовательский компонент, представленный для извлечения значения поля из TextField
при событии изменения:
const EditableTableCell = ({ row, fieldName, onCellValueChange }) => {
const handleTextFieldChange = e => {
onCellValueChange({
fieldValue: e.target.value,
fieldName: fieldName
});
};
return (
<TableCell>
<TextField
onChange={handleTextFieldChange}
id={fieldName}
defaultValue={row[fieldName]}
margin="normal"
/>
</TableCell>
);
};
3) и, наконец, после нажатия кнопки сохранения, сохранить изменения в БД:
handleSave(rowIndex) {
const rowChanges = this.state.rowsChanges[rowIndex];
console.log("Save row changes into db...")
//clear row changes...
this.setState(prevState => ({
rowsChanges: {
...prevState.rowsChanges,
[rowIndex]: {}
}
}));
}
Вот демо (форк Простой пример таблицы )