我正在使用react-table
,并且每个列都有一个过滤方法。但是,我似乎无法弄清楚我是如何实际设置过滤器输入字段的样式 - 它现在是白色并与背景混合。
这是一个codepen,其中“姓氏”列是可过滤的,带有输入字段:https://codepen.io/anon/pen/QgOdOp?editors=0010
我想在这个输入字段中添加一些语义样式,例如:
<div className="ui icon input">
// Input values would go here
<i className="search icon" />
</div>
但我似乎不知道如何将输入值绑定到列本身。
我在特定列中尝试了以下内容,但它没有呈现任何内容:
{
Header: 'Last Name',
filterable: true,
id: 'lastName',
accessor: d => d.lastName
Filter: Cellinfo => (
<div className="ui icon input">
<select onChange={event => onFiltersChange(event.target.value)} value={filter ? filter.value : ''}></select>
<i className="search icon" />
</div>
)
}
答案 0 :(得分:8)
这可以通过纯CSS完成。为表格提供id
或class
,然后根据需要定位输入并设置样式。
<ReactTable
showFilters={true}
data={makeData()}
columns={columns}
className='react-table'
/>
.react-table input {
background-color: black;
color: white;
}
更好的选择是使用react-table
的内置Filter
列选项来定义过滤器的自定义UI。这在Custom Filtering example中有记录。这允许您传递style
对象。
const columns = [
{
Header: 'Name',
columns: [
{
Header: 'First Name',
accessor: 'firstName',
},
{
Header: 'Last Name',
filterable: true,
id: 'lastName',
accessor: d => d.lastName,
Filter: ({filter, onChange}) => (
<input
onChange={event => onChange(event.target.value)}
value={filter ? filter.value : ''}
style={{
width: '100%',
backgroundColor: 'gray',
color: 'white',
}}
/>
),
},
],
},
{
Header: 'Info',
columns: [
{
Header: 'Age',
accessor: 'age',
},
],
},
];
使用此功能,您可以定义背景图像以获得所需的图标。或者您可以传入一个自定义组件,该组件在输入后面设置一个图标元素。像这样:
Filter: ({filter, onChange}) => {
return (
<div style={{position: 'relative'}}>
<input
onChange={event => onChange(event.target.value)}
value={filter ? filter.value : ''}
style={{
width: '100%',
backgroundColor: 'transparent',
color: '#222222',
}}
/>
<i style={{position: 'absolute', right: '10px', lineHeight: '30px'}}>
Icon
</i>
</div>
)
);