0

嗨,对于一个项目,我需要用户选择应该在 React 数据网格中显示的列。一些列可能是预设的,其他列可能会在以后添加。但是我尝试过,即使状态已相应设置并且没有显示错误,它也不会适用于多个添加的列

新列将由选择器选择。这将被添加到表类的状态中。如果尝试通过强制渲染方法的道具传递它,但它也没有多次更新列。我使用了不同/相同的键集。如果它是第一个新列,则将识别相同。我尝试调试它是否有任何理由将 nextColumns 归类为未更改,但它并没有让我更接近。

在 render() 中的 state.columns

0: {key: "date", name: "Date"}   ->Preset
1: {key: "date", name: "Date1"}  ->Added and created
2: {key: "ffd", name: "Testfdg2"}->Added to state not created
3: {key: "test", name: "Test3"}  ->Not created
4: {key: "test", name: "Test4"}
5: {key: "test", name: "Test5"}
6: {key: "test", name: "Test6"}
length: 7
__proto__: Array(0)

组件调用

<ReactDataGrid
    columns={this.state.columns}
    rowGetter={i => this.handleRowGetter(i)}
    rowsCount={this.rowsCount()}
    minHeight={500}
    minColumnWidth={10}
    onGridSort={(sortColumn, sortDirection)=>this.gridSort(sortColumn, sortDirection)}
    toolbar={
      <Toolbar enableFilter={true}
    />}
    onAddFilter={this.handleFilterChange}
    onClearFilters={this.handleOnClearFilters}
    onRowDoubleClick={(click,row) =>{this.handleClick(click,row)}}

    />

所以目标是根据状态创建所有列

如果需要更多代码,我很乐意提供

问候乔纳森

4

2 回答 2

0

好的解决了

在线加州 react-data-grid.js 中的 5804

    if (!ColumnMetrics.sameColumns(this.props.columns, nextProps.columns,this.props.columnEquality) || nextProps.minWidth !== this.props.minWidth) {
          var columnMetrics = this.createColumnMetrics(nextProps);
          this.setState({ columnMetrics: columnMetrics });
       }

this.props.columns 将与下一个 props.columns 相同,因此不会更新 columnMetrics。

在线加州 react-data-grid.js 中的 6500

    this.setupGridColumns = function () {
    var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0]:_this2.props;
    var columns = props.columns;

    if (_this2._cachedColumns === columns) {
      return _this2._chachedComputedColumns;
    }

更多的 _this2._cachedColumns 将与 props.columns 相同,因此返回 cachedComputedColumns

所以没有真正更新 ColumnMetrics -> 没有视觉更新。即使道具和状态设置正确。

因此,排除 if 并更改 return 语句将使您可以将新列添加到表中

于 2019-04-11T12:42:49.420 回答
0

来自文档

key:区分每一列的唯一键

您需要为key. 所以每个key都是唯一的

于 2019-04-03T11:31:52.547 回答