Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当使用新的宽度和列数重新渲染时,如何使react虚拟化集合更新?_Javascript_Reactjs_React Virtualized - Fatal编程技术网

Javascript 当使用新的宽度和列数重新渲染时,如何使react虚拟化集合更新?

Javascript 当使用新的宽度和列数重新渲染时,如何使react虚拟化集合更新?,javascript,reactjs,react-virtualized,Javascript,Reactjs,React Virtualized,下面是我的react组件的cellSizeAndPositionGetter和render函数。调整屏幕大小时,我的屏幕布局不会改变,但我可以通过控制台确认宽度和状态。columnCount(由cellSizeAndPositionGetter使用)正在改变 参数更改(即,宽度)后是否可能触发收集更新?还是我在这里做错了什么 旁注:react virtualized列表会在宽度参数更改时更新 cellSizeAndPositionGetter({index}) { const list

下面是我的react组件的
cellSizeAndPositionGetter
render
函数。调整屏幕大小时,我的屏幕布局不会改变,但我可以通过控制台确认
宽度和
状态。columnCount
(由
cellSizeAndPositionGetter使用)正在改变

参数更改(即,
宽度
)后是否可能触发
收集
更新?
还是我在这里做错了什么

旁注:
react virtualized
列表
会在宽度参数更改时更新

cellSizeAndPositionGetter({index}) {
    const list = this.state.cardsList;
    const columnCount = this.state.columnCount;

    const columnPosition = index % (columnCount || 1);
    const datum = list[index]; 

    const height = datum.height;
    const width = CELL_WIDTH;
    const x = columnPosition * (GUTTER_SIZE + width);
    const y = this._columnYMap[columnPosition] || 0;

    this._columnYMap[columnPosition] = y + height + GUTTER_SIZE;

    return ({
        height,
        width,
        x,
        y
    });
}


宽度的变化是否意味着电池回流?(是否要更改
集合
中单元格的大小和位置?)


集合
(与所有其他react虚拟化组件一样)缓存大小和位置信息以提高性能。如果情况发生变化,您需要明确清除这些缓存。参见和。

宽度的变化是否意味着电池回流?(是否要更改
集合
中单元格的大小和位置?)

集合
(与所有其他react虚拟化组件一样)缓存大小和位置信息以提高性能。如果情况发生变化,您需要明确清除这些缓存。见和

render() {
    return (
        <div style={styles.subMain}>
            <AutoSizer >
                {({height, width}) => {
                    console.log(`width: ${width}`);
                    console.log(`col count: ${this.state.columnCount}`);
                    return (
                        <Collection
                            cellCount={this.state.cardsList.length}
                            cellRenderer={this.cellRenderer}
                            cellSizeAndPositionGetter={this.cellSizeAndPositionGetter}
                            height={height}
                            width={width}
                            overscanRowCount={1}
                        />
                    );
                }}
            </AutoSizer>
        </div>
    );
}
updateDimensions() {
    this.setState({
        screenWidth: window.innerWidth,
        columnCount: Math.floor(window.innerWidth / (CELL_WIDTH + GUTTER_SIZE)),
        cardsList: [...this.state.cardsList.slice(0, this.state.cardsList.length - 1)] 
    });
}

componentDidMount() {
    ...
    window.addEventListener("resize", this.updateDimensions);
}