React - 处理状态数组中单元格的修改
React - Handle modification of cell inside state's array
我正在创建我的 fixed-data-table-2
(npm) 实现,其中一个编辑按钮将单元格更改为输入单元格,可以对其进行编辑然后保存 (post)。
但是有个大问题...
打字太慢了,因为每次在单元格上触发 onChange
时,我都会更新整个数组(处于状态)。
Event Handler (Table)
import reactUpdate from "react/lib/update";
onChangeEditableCell(field, rowIndex, newValue) {
const data = reactUpdate(this.state.data, {[rowIndex]: {[field]: {$set: newValue}}})
this.setState({data : data});
}
Event Handler (Cell)
onChange(e) {
e.preventDefault();
const newValue = e.target.value;
this.props.onHandleInput(this.props.field, this.props.rowIndex, newValue);
}
render() {
const {rowIndex, field, data, editMode, onHandleInput, ...props} = this.props;
return (
<Cell {...props}>
{editMode ? <input onChange={this.onChange} className="text-cell-edit" type="text" value={this.getCell()} /> : data[rowIndex][field]}
</Cell>
);
}
这显然是个坏主意...我怎样才能达到相同但性能方面的目的?
备注
onHandleInput
(单元格的属性)是 onChangeEditableCell
(table 的函数)
PS
当用户点击 Save
时,我需要 data
数组来 post 整个对象
尝试添加一些超时:
onChange(e) {
e.preventDefault();
const newValue = e.target.value;
if (this.timeout) {
clearTimeout(this.timeout);
this.timeout = 0;
}
this.timeout = setTimeout(()=> {
this.props.onHandleInput(this.props.field, this.props.rowIndex, newValue);
}, 1000);
}
我在这种情况下所做的是让单元格有自己的状态,每次按键都会更新。然后使用 onblur
事件更新 table 级状态,该事件在输入失去焦点后触发。
在我看来,个人输入是将状态向上拉的一般做法的一个很好的例外。
我正在创建我的 fixed-data-table-2
(npm) 实现,其中一个编辑按钮将单元格更改为输入单元格,可以对其进行编辑然后保存 (post)。
但是有个大问题...
打字太慢了,因为每次在单元格上触发 onChange
时,我都会更新整个数组(处于状态)。
Event Handler (Table)
import reactUpdate from "react/lib/update";
onChangeEditableCell(field, rowIndex, newValue) {
const data = reactUpdate(this.state.data, {[rowIndex]: {[field]: {$set: newValue}}})
this.setState({data : data});
}
Event Handler (Cell)
onChange(e) {
e.preventDefault();
const newValue = e.target.value;
this.props.onHandleInput(this.props.field, this.props.rowIndex, newValue);
}
render() {
const {rowIndex, field, data, editMode, onHandleInput, ...props} = this.props;
return (
<Cell {...props}>
{editMode ? <input onChange={this.onChange} className="text-cell-edit" type="text" value={this.getCell()} /> : data[rowIndex][field]}
</Cell>
);
}
这显然是个坏主意...我怎样才能达到相同但性能方面的目的?
备注
onHandleInput
(单元格的属性)是 onChangeEditableCell
(table 的函数)
PS
当用户点击 Save
data
数组来 post 整个对象
尝试添加一些超时:
onChange(e) {
e.preventDefault();
const newValue = e.target.value;
if (this.timeout) {
clearTimeout(this.timeout);
this.timeout = 0;
}
this.timeout = setTimeout(()=> {
this.props.onHandleInput(this.props.field, this.props.rowIndex, newValue);
}, 1000);
}
我在这种情况下所做的是让单元格有自己的状态,每次按键都会更新。然后使用 onblur
事件更新 table 级状态,该事件在输入失去焦点后触发。
在我看来,个人输入是将状态向上拉的一般做法的一个很好的例外。