首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >状态阵列内单元的反应处理修改

状态阵列内单元的反应处理修改
EN

Stack Overflow用户
提问于 2017-03-17 16:50:53
回答 2查看 567关注 0票数 0

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

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

事件处理程序(表)

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

事件处理程序(单元)

代码语言:javascript
复制
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>
    );
}

这显然是个坏主意..。我怎样才能达到同样的目标,但性能方面呢?

Note

onHandleInput (单元格支柱)是onChangeEditableCell (表的函数)

PS

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-17 18:48:13

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

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

票数 2
EN

Stack Overflow用户

发布于 2017-03-17 17:01:34

尝试添加一些超时:

代码语言:javascript
复制
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);

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42863061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档