反应从非静态列调整固定数据表的大小

Posted

技术标签:

【中文标题】反应从非静态列调整固定数据表的大小【英文标题】:react resize fixed-data-table from nonstatic columns 【发布时间】:2017-07-21 13:14:38 【问题描述】:

这可能是一种反模式,但我使用的是固定数据表来显示具有变化列的表。 resize 函数根据状态变化调整每列的宽度。但是,我需要从收到的道具中构建状态或列。我无法从渲染函数更新状态。有没有更好的方法来解决这个问题?到目前为止,我最好的解决方案是将状态宽度生成为 100,但这是暂时的。

constructor(props) 
    super(props);var columnWidths =
            recordid: 40,

        ;
    for(var i=0; i<100;i++) 
        columnWidths[i]=200
    

    this.state = 
        columnWidths
    ; 
    this._onColumnResizeEndCallback = this._onColumnResizeEndCallback.bind(this);

_onColumnResizeEndCallback(newColumnWidth, columnKey) 
    this.setState(( columnWidths ) => (
        columnWidths: 
            ...columnWidths,
            [columnKey]: newColumnWidth,
        
    ));
    console.log(newColumnWidth + " " + columnKey)

【问题讨论】:

【参考方案1】:

所以显然我可以使用 componentWillUpdate() 从道具更新我的反应状态。 componentWillReceiveProps() 不会更新我从 api 调用中提取的道具。但是,我需要在将道具拉入渲染之前更新状态。此几乎解决方案在预先填写时有效,但在页面刷新时无效:

componentWillUpdate() 
    var columnWidths = 
        recordid: 40,
    ;
    Object.keys(this.props.fields).map(key => 
        columnWidths[this.props.fields[key].Order] = 200;

    )
    this.state = 
        columnWidths
    ;


我必须在第一次渲染时添加 || 或符号,然后在加载道具后自动创建这些符号

width=columnWidths[field.Order]||200

【讨论】:

【参考方案2】:

我不确定我是否理解您的问题,但是您可以在构造函数(props)函数中初始化您的状态,然后在 componentWillMount 或 componentDidMount 以及 componentWillReceiveProps(newProps) 中使用基于 this.props 的 setState。

所以看来你需要在生命周期方法 componentWillMount 或 componnentDidMount 中调用 setState。

【讨论】:

componentWillMount 和 componnentDidMount 有问题,因为我正在等待 api 调用以获取列的名称,并且它们并不总是以相同的顺序完成 REST 调用。更新效果最好。

以上是关于反应从非静态列调整固定数据表的大小的主要内容,如果未能解决你的问题,请参考以下文章

反应固定数据表 2 滚动条

反应 ag-grid 自动调整列大小和网格宽度

从非反应文件分派操作时 Redux 状态未更新

如何设置数据网格列以填充数据网格集以填充和布局自动调整大小的网格?

列隐藏时固定表格布局调整大小

如何在 DataTables 的 FixedColumns 插件中以交互方式调整固定列的大小