簡體   English   中英

從非靜態列反應調整固定數據表的大小

[英]react resize fixed-data-table from nonstatic columns

這可能是一種反模式,但是我正在使用固定數據表來顯示具有更改列的表。 調整大小功能根據狀態變化調整每列的寬度。 但是,我需要根據收到的道具來構建狀態或列。 我無法從render函數更新狀態。 有沒有更好的方法來解決這個問題? 到目前為止,我最好的解決方案是將狀態寬度生成為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)
}

因此,顯然我可以使用componentWillUpdate()從道具更新我的反應狀態。 componentWillReceiveProps()不會更新從api調用中提取的道具。 但是,我需要在將道具拉入渲染器之前更新狀態。 如果預先填寫了此Almost Solution,則可以使用,但刷新頁面后將無效:

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}

我不確定我是否理解您的問題,但是您可以在構造函數(props)中初始化狀態,然后在componentWillMount或componentDidMount以及componentWillReceiveProps(newProps)中基於this.props使用setState。

因此,似乎您需要在生命周期方法componentWillMount或componnentDidMount中調用setState。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM