如何在react-table中计算和设置defaultColumn Width?
How to calculate and set defaultColumn Width in react-table?
我正在尝试动态设置列宽,以便列宽的总和占据 table 的整个宽度。我有一个具有动态宽度的 react-table 组件(占其父宽度的 100%),我将宽度除以 columns.length 并设置以下内容:
const defaultColumn = useMemo(
() => ({
width: columnWidth > 0 ? columnWidth : 150,
}),
[columnWidth]
);
const tableInstance= useTable(
{
columns: columnsTable,
data: dataTable,
defaultColumn: defaultColumn,
},
useGlobalFilter,
useSortBy,
usePagination,
useBlockLayout
);
当我在控制台记录 defaultColumn 时,它为我提供了正确的计算宽度,但 table 单元格始终显示 150 像素。为什么 table 不显示 defaultColumn 宽度值?我该如何正确地做到这一点?
如我所见,defaultColumn
中的更改不会触发重建您的 columns
定义。
因此,为了修复它,我建议让您的列定义依赖于 defaultColumn
值。
const defaultColumn = useMemo(
() => ({
width: columnWidth > 0 ? columnWidth : 150,
}),
[columnWidth],
);
// Here we make our columns definition to be related on defaultColumn value.
const columns = useMemo(() => {
// We recreate columnsTable array to create a new reference to table columns value by creating a new array.
return [...columnsTable];
}, [defaultColumn]);
const tableInstance = useTable(
{
columns,
data: dataTable,
defaultColumn: defaultColumn,
},
useGlobalFilter,
useSortBy,
usePagination,
useBlockLayout,
);
我正在尝试动态设置列宽,以便列宽的总和占据 table 的整个宽度。我有一个具有动态宽度的 react-table 组件(占其父宽度的 100%),我将宽度除以 columns.length 并设置以下内容:
const defaultColumn = useMemo(
() => ({
width: columnWidth > 0 ? columnWidth : 150,
}),
[columnWidth]
);
const tableInstance= useTable(
{
columns: columnsTable,
data: dataTable,
defaultColumn: defaultColumn,
},
useGlobalFilter,
useSortBy,
usePagination,
useBlockLayout
);
当我在控制台记录 defaultColumn 时,它为我提供了正确的计算宽度,但 table 单元格始终显示 150 像素。为什么 table 不显示 defaultColumn 宽度值?我该如何正确地做到这一点?
如我所见,defaultColumn
中的更改不会触发重建您的 columns
定义。
因此,为了修复它,我建议让您的列定义依赖于 defaultColumn
值。
const defaultColumn = useMemo(
() => ({
width: columnWidth > 0 ? columnWidth : 150,
}),
[columnWidth],
);
// Here we make our columns definition to be related on defaultColumn value.
const columns = useMemo(() => {
// We recreate columnsTable array to create a new reference to table columns value by creating a new array.
return [...columnsTable];
}, [defaultColumn]);
const tableInstance = useTable(
{
columns,
data: dataTable,
defaultColumn: defaultColumn,
},
useGlobalFilter,
useSortBy,
usePagination,
useBlockLayout,
);