0

我正在创建我的fixed-data-table-2(npm)实现,其中一个编辑按钮将单元格更改为输入,可以编辑然后保存(发布)。

在此处输入图像描述

但是有一个主要问题......打字太慢了,因为我每次onChange在单元格上触发时都会更新整个数组(处于状态)。

事件处理程序(表)

import reactUpdate from "react/lib/update";
onChangeEditableCell(field, rowIndex, newValue) {
    const data = reactUpdate(this.state.data, {[rowIndex]: {[field]: {$set: newValue}}})
    this.setState({data : data});
}

事件处理程序(单元格)

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(表的功能)

附言

当用户点击时,我需要data数组发布整个对象Save

4

2 回答 2

2

在这种情况下,我所做的是让单元格有自己的状态,每次按键都会更新。然后使用事件更新表级状态,该onblur事件在输入失去焦点后触发。

在我看来,个人输入是向上拉状态的一般做法的一个很好的例外。

于 2017-03-17T18:48:13.257 回答
0

尝试添加一些超时:

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

}
于 2017-03-17T17:01:34.877 回答