我有一个react-table,我试图改变列的大小。我试过编辑列中的“width”值,编辑scss样式表中的值,并添加内联样式,但没有任何效果。我在哪里对这个react-table进行css更改?任何帮助都将是感激的。我看到的任何例子都在我尝试过的列区域中更改了它。
import React, {useState, Fragment} from "react";
import {useTable, useFilters, useGlobalFilter, useRowSelect} from "react-table";
import dataSet from "../data";
import {IndeterminateCheckbox} from './TableCheckbox';
function DeployTable() {
function DefaultColumnFilter({
column: { filterValue, preFilteredRows, setFilter },
}) {
const count = preFilteredRows.length
return (
<input
value={filterValue || ''}
onChange={e => {
setFilter(e.target.value || undefined) // Set undefined to remove the filter entirely
}}
placeholder={`Search ${count} records...`}
/>
)
}
const [data] = useState(dataSet);
const [columns] = useState([
{
width:'20',
Header: "Deploy Id",
accessor: "deploy_id"
},
{
Header: "Requestor",
accessor: "requestor",
filter: "fuzzyText"
},
{
Header: "Market",
accessor: "market"
},
{
Header: "Email",
minWidth: 50,
maxWidth: 50,
accessor: "email"
},
{
Header: "Environment",
accessor: "environment"
},
{
Header: "Completed Date",
accessor: "completed_date"
},
{
Header: "Deploy Group",
accessor: "deploy_group"
},
{
Header: "Job Status",
accessor: "job_status"
},
{
Header: "CRQ",
accessor: "crq"
}
]);
const defaultColumn = React.useMemo(
() => ({
// Let's set up our default Filter UI
Filter: DefaultColumnFilter,
}),
[]
)
const filterTypes = React.useMemo(
() => ({
text: (rows, id, filterValue) => {
return rows.filter(row => {
const rowValue = row.values[id];
return rowValue !== undefined
? String(rowValue)
.toLowerCase()
.startsWith(String(filterValue).toLowerCase())
: true;
});
}
}),
[]
);
const {
getTableProps,
getTableBodyProps,
headerGroups,
rows,
prepareRow
} = useTable({
columns,
data,
defaultColumn,
filterTypes
},
useFilters,
useGlobalFilter,
useRowSelect,
// Here we will use a plugin to add our selection column
hooks => {
hooks.visibleColumns.push(columns => {
return [
{
id: 'selection',
// Make this column a groupByBoundary. This ensures that groupBy columns
// are placed after it
groupByBoundary: true,
// The header can use the table's getToggleAllRowsSelectedProps method
// to render a checkbox
Header: ({ getToggleAllRowsSelectedProps }) => (
<div>
<IndeterminateCheckbox {...getToggleAllRowsSelectedProps()} />
</div>
),
// The cell can use the individual row's getToggleRowSelectedProps method
// to the render a checkbox
Cell: ({ row }) => (
<div>
<IndeterminateCheckbox {...row.getToggleRowSelectedProps()} />
</div>
),
},
...columns,
]
})
});
return (
<Fragment>
<table {...getTableProps()} >
<thead>
{headerGroups.map(headerGroup => (
<tr {...headerGroup.getHeaderGroupProps()}>
{headerGroup.headers.map(column => (
<th {...column.getHeaderProps()}>{column.render("Header")}
<div>{column.canFilter ? column.render('Filter') : null}</div></th>
))}
</tr>
))}
</thead>
<tbody {...getTableBodyProps()}>
{rows.map((row, i) => {
prepareRow(row);
return (
<tr {...row.getRowProps()}>
{row.cells.map(cell => {
return <td {...cell.getCellProps()}>{cell.render("Cell")}</td>;
})}
</tr>
);
})}
</tbody>
</table>
</Fragment>
);
}
export default DeployTable;
在样式表中。
.Button {
position: -webkit-sticky;
position: sticky;
top: 0;
padding: 10px;
font-size: 14px;
}
body {
background-color: #d1e5f0;
font: 14px sans-serif;
}
#container {
width: 100%;
height: 100%;
position: relative;
}
#title {
font: 26px sans-serif;
position: absolute;
top: -40px;
left: 450px;
}
#FilterableTable {
width: 90%;
height: 90%;
position: absolute;
top: 40px;
left: 20px;
}
.SearchBar {
display: inline;
position: relative;
left: 1%;
}
.SearchBar input {
position: relative;
left: 2%;
}
.Button {
display: inline;
position: relative;
left: 1%;
}
table {
empty-cells: show;
position: initial;
top: 40px;
left: 20px;
border-collapse: collapse;
margin-bottom: 20px;
margin-top: 20px;
}
table a:link, a:visited { text-decoration: none; }
table a:hover, a:active { text-decoration: underline; }
table, th, td { border: 1px solid black; }
table, th, tr { border: 1px solid black; }
td, th {
padding: 5px;
text-align: center;
height: 20px;
}
th {
background-color: #4393c3;
color: #d9f0a3;
}
td { background-color: #92c5de; }
tr { background-color: #92c5de; }
tr:hover td { background-color: #edf8b1; }
tr:hover tr { background-color: #edf8b1; }
/*
This query will take effect for any screen smaller than 480px.
*/
@media only screen and (max-device-width: 480px) {
/* Force table to not be like tables anymore */
table, thead, tbody, th, td, tr {
display: block;
}
table{
border: none;
width: 100%;
left: 0px;
padding-right: 40px;
height: 400px;
overflow-y: scroll;
}
tbody{
border: none;
width: 100%;
left: 0px;
}
/* Hide table headers (but not display: none;, for accessibility) */
thead tr {
position: absolute;
top: -9999px;
left: -9999px;
}
tr {
margin: 0 0 1rem 0;
}
.ReactTable .rt-thead {
overflow-y: scroll;
}
td {
/* Behave like a "row" */
border: none;
border-bottom: 1px solid #eee;
position: relative;
padding-left: 50%;
}
td:before {
/* Now like a table header */
position: absolute;
/* Top/left values mimic padding */
top: 0;
left: 6px;
width: 45%;
padding-right: 10px;
white-space: nowrap;
}
td:nth-of-type(1):before { content: "Select"; }
td:nth-of-type(2):before { content: "Deploy ID"; }
td:nth-of-type(3):before { content: "Requestor"; }
td:nth-of-type(4):before { content: "Market"; }
td:nth-of-type(5):before { content: "Env"; }
td:nth-of-type(6):before { content: "Group"; }
td:nth-of-type(7):before { content: "Deploy Date"; }
td:nth-of-type(8):before { content: "Approver"; }
td:nth-of-type(9):before { content: "Completed Date"; }
td:nth-of-type(10):before { content: "CRQ"; }
td:nth-of-type(11):before { content: "Job Status"; }
}
4条答案
按热度按时间68bkxrlz1#
您需要使用布局挂钩(useBlockLayout、useAbsoluteLayout或useFlexLayout)才能应用指定的宽度。所有这些钩子都将默认列宽设置为150 px。
您可以在React Example: Column Sizing中看到react-table v8的示例,在全宽可调整大小的表中看到v7的示例。
如果不想使用布局钩子,可以根据需要使用
getHeaderProps
和getCellProps
,取minWidth
和width
的值:zbsbpyhn2#
试试这个:你可以用同样的方式设计行、单元格、列的样式(这被称为prop getter模式)
在您的代码中:搜索...列。getHeaderProps()
将带有style的对象传递给column. getHeaderProps()&如果需要,您还可以添加更多的 prop 和样式:
或
在上面的代码中,**getColumnStyle(column)**是我的自定义函数,我在其中返回特定列的样式。
说明:这是一个无头UI库。意思是,它只提供逻辑和没有UI(建立自己的UI),我们可以样式表,我们想要的,这是所谓的 prop getter模式。你可以在这里阅读更多:https://kentcdodds.com/blog/how-to-give-rendering-control-to-users-with-prop-getters
qzwqbdag3#
默认宽度为150,在文档中给出。因为宽度是
int
属性,所以不要使用单引号。brqmpdu14#
在TanStack Table v8(此React Table v7的后续版本)中,要设置width,您可以在列定义中设置
size
,例如:参考:www.example.comhttps://tanstack.com/table/v8/docs/api/features/column-sizing#size