# AntD Table组件滚动高度自适应问题
AntD
版本信息:4.6.2。
问题描述
实际使用中发现AntD
的Table
组件宽度是自适应的,但是高度并不是自适应的,这就造成了一个问题,如果表格容器高度发生变化,而表格的高度并不会发生变化。
表格的滚动高度是由API中的scroll
里的y
属性来控制 (opens new window),文档中的该值是一个数值。
那么想要解决表格高度的自适应问题,只要让scroll
里的y
属性值随表格容器的变化而变化就可以了。
解决思路:(这里默认表格容器是自适应的,随浏览器窗口变化而变化)
给表格容器添加ref
-> 监听浏览器窗口resize事件
-> 通过ref获取表格容器DOM
-> 将表格容器的高度结果计算后传递给Table组件API中的scroll里的y属性
。
展开查看源码
class TestInfoView extends React.Component {
constructor(props) {
super(props);
this.state = {
tableScrollHeight: 0,
headerHeight: 0,// 表头高度,根据实际设置
columns: [],
datas: []
};
this.tableContainer_dom = React.createRef();
}
// 计算table滚动高度
tableScrollHeightCompute = () => {
const height = this.tableContainer_dom.current.offsetHeight;
const headerHeight = this.state.headerHeight;
this.setState({
tableScrollHeight: height - headerHeight// 减去表头高度
});
}
componentDidMount() {
setTimeout(() => {
this.tableScrollHeightCompute();// 延后执行
}, 0);
window.addEventListener("resize", this.tableScrollHeightCompute);
}
componentWillUnmount() {
window.removeEventListener("resize", this.tableScrollHeightCompute);
}
render() {
const { columns, datas, tableScrollHeight } = this.state;
return (
<div className="table-container" ref={this.tableContainer_dom}>
<Table
bordered={true}
sticky={true}
scroll={{y: tableScrollHeight}}
pagination={false}
columns={columns}
dataSource={datas}
/>
</div>
);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52