React Redux和aggrid重新绑定数据

时间:2018-02-18 23:33:11

标签: javascript reactjs redux ag-grid ag-grid-react

还有另一个关于aggrid的问题,我似乎无法弄清楚如何以最佳方式更新复选框表。

我可以关闭deltaRowDataMode并且一切运行良好,但它渲染整个网格,我只是不喜欢忽略性能的想法。 (因为我有成千上万的用户)。

我设置deltaRowDataMode' on'这使得网格移动/更新/删除速度快,我还有动态列(通过redux存储和api调用生成)和基于数据的单元格,这是正常工作...直到我尝试校准我的复选框的值。例如,默认情况下,如果我拥有此权限,那么它将如下所示' administrator.assign.privileges'

enter image description here

但是,当我检查下一个方框时,我的所有数据都会更新,但不会更新,但我的复选框不会被检查。

enter image description here

正如您所看到的那样,数据正在传递,并检查下一个状态。但是没有检查第4个框。但是当我在那之后检查另一个方框时,那么在“检查”之前的方框中。这让我相信我落后于我的状态,我还需要另一个渲染更新,最佳方法是什么?

这是我的cellRendererFramework组件:

import React, { Component } from 'react';
import Checkbox from 'material-ui/Checkbox';
import _ from 'lodash';

class CheckboxRenderer extends Component {
    constructor(props) {
        super(props);
        this.state = {
            value: false,
        };
        this.handleCheckboxChange = this.handleCheckboxChange.bind(this);
    }

    componentDidMount() {
      this.setDefaultState();
    }

    setDefaultState() {
      const { data, colDef } = this.props;
      if (data.Roles && data.Roles.length > 0) {
        if (_.find(data.Roles, _.matchesProperty('name', colDef.headerName))) {
          this.setState({
            value: true,
          });
        }
      } else if (data.Privileges && data.Privileges.length > 0) {
        console.log(data.Privileges);
        if (_.find(data.Privileges, _.matchesProperty('name', colDef.headerName))) {
          this.setState({
            value: true,
          });
        }
      }
    }

    handleCheckboxChange(event) {
      const { data, colDef } = this.props;
      const { externalData } = this.props.api;
      const newVal = !this.state.value;
      if (newVal) {
        if (this.props.api.mode === 'Privilege') {
          this.props.api.handleAssign(data.id, colDef.id, externalData.entities.Privilege[colDef.id]);
        } else {
          this.props.api.handleAssign(data.id, colDef.id, externalData.entities.Role[colDef.id]);
        }
      } else {
        this.props.api.handleUnassign(data.id, colDef.id);
      }
        this.setState({value: newVal});
    }

    render() {
      return (
        <Checkbox
            checked={this.state.value}
            onChange={this.handleCheckboxChange} />
      );
    }
}

export default CheckboxRenderer;

0 个答案:

没有答案