머리말
지난 몇 년간 참여한 여러 프로젝트에서 프론트엔드 부분은 주로 Vue
+ 를 사용하여 ElementUI
개발되었습니다 . 최근 프로젝트에 참여하면서 프론트엔드 부분을 과감하게 React
+ 로 바꾸었습니다 Antd
.
혼란시키다
이전 Vue
+ ElementUI
프로젝트 에서는 Table
구성 요소 열의 열 너비(각 열의 열 너비 합계)가 Table
컨테이너 너비를 초과하면 자동으로 가로 스크롤 막대가 나타납니다. 또한 구성 요소 열의 열 너비가 컨테이너 너비 Table
에 도달하지 않으면 구성 요소의 오른쪽이 비어 있고 아무것도 표시되지 않습니다. 데모를 참조하여 재현할 수 있습니다: https://codesandbox.io/s/elementui-table-column-width-20220314-12secw 구성 요소 중 열 너비의 렌더링 방법이 약간 다른 것 같습니다 . 에서는 컴포넌트 컬럼의 컬럼 너비가 컨테이너의 너비를 초과하는지 여부에 관계없이 각 컬럼이 실제로 렌더링될 때 모든 컬럼의 컬럼 너비에 대한 현재 컬럼의 컬럼 너비의 액세스 비율 너비에 따라 렌더링됩니다. 예를 들어 A, B, C 세 개의 열이 있고 너비는 각각 , , 이고 세 열 A, B, C 의 실제 렌더링 너비는 , , , 예상하지 못한 , , 입니다 . 신인인 저는 이 방법이 조금 의아했습니다. 데모 주소 첨부 버전: https://codesandbox.io/s/antd-table-column-width-20220314-jx7cli?file=/src/MyTable.jsTable
Table
Antd
Table
ElementUI
Antd
Table
Table
50px
50px
100px
25%
25%
50%
50px
50px
100px
Antd
Antd
해결책
Table
컴포넌트의 열 너비가 컨테이너의 너비보다 작은 경우 컴포넌트의 오른쪽에 공백을 남겨두기Table
를 바랍니다 .Table
개인적으로 생각할 수 있는 비교적 저렴한 방법은 컬럼에 너비가 지정되지 않은 컬럼을 추가하여 컴포넌트가Table
렌더링될 때 실제 남은 너비에 따라 컬럼이 렌더링되고 컨텐츠는 비어 있는.
위 코드의 데모 주소: https://codesandbox.io/s/antd-table-column-width-20220314-02-xppcn4?file=/src/MyTable.jsimport { Table } from "antd"; const dataSource = [ { key: "1", name: "张三", age: 32, address: "西湖区湖底公园1号" }, { key: "2", name: "李四", age: 42, address: "西湖区湖底公园1号" } ]; const columns = [ { title: "姓名", dataIndex: "name", key: "name", width: 110 }, { title: "年龄", dataIndex: "age", key: "age", width: 90 }, { title: "住址", dataIndex: "address", key: "address", width: 220 }, { } // 补上的列,实际渲染时宽度为表格组件剩余宽度,内容为空 ]; export default function MyTable() { return ( <div> <Table bordered dataSource={ dataSource} columns={ columns} />; </div> ); }
Table
구성 요소의 열 너비가 컨테이너 너비를 초과하는 경우Table
스크롤을 위해 테이블 구성 요소에 가로 스크롤 막대가 나타날 것으로 예상됩니다. 이 요구 사항의 경우Table
구성 요소 속성을 지정하여scroll={ { x: "max-content" }}
스크롤 막대를 호출할 수 있습니다 . 속성에 대한 설명은 https://ant.design/components/table-cn/#scrollscroll
문서를 참조하십시오 .
위 코드의 데모 주소: https://codesandbox.io/s/antd-table-column-width-20220314-03-e2p223?file=/src/MyTable.jsimport { Table } from "antd"; const dataSource = [ { key: "1", name: "张三", age: 32, address: "西湖区湖底公园1号" }, { key: "2", name: "李四", age: 42, address: "西湖区湖底公园1号" } ]; const columns = [ { title: "姓名", dataIndex: "name", key: "name", width: 500 }, { title: "年龄", dataIndex: "age", key: "age", width: 400 }, { title: "住址", dataIndex: "address", key: "address", width: 900 }, { } ]; export default function MyTable() { return ( <div> <Table bordered dataSource={ dataSource} columns={ columns} scroll={ { x: "max-content" }} // 设置scroll /> </div> ); }
마지막에 쓰기
위의 내용은 구성 요소에 대한 몇 가지 Table
의심 사항입니다. 의견 영역에서 논의하고 교환하는 것을 환영합니다. :)