agggrid 有另一个问题,我似乎无法弄清楚如何以最佳方式更新复选框表。
我可以关闭 deltaRowDataMode 并且一切正常,但是它渲染了整个网格,我只是不喜欢忽略性能的想法。(以防我有成千上万的用户)。
我设置了 deltaRowDataMode 'on' 这使得网格移动/更新/删除速度更快,我也有动态列(通过 redux 存储和 api 调用生成)和基于数据的单元格,这工作正常......直到我尝试校准我的复选框的价值。例如,默认情况下它看起来像这样,如果我有这个权限'administrator.assign.privileges'
但是,当我选中下一个框时,我的所有数据都会更新,而不会更新,但不会选中我的复选框。
如您所见,数据正在传递,并在那里检查下一个状态。但是,未选中第 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;