reactjs - 如何在 ReactTable 中设置自定义过滤?
问题描述
如何设置过滤?我创建了一列并将其传递给 ReactTable 组件。接下来,我创建了一个过滤函数,我在想要的列中使用它。
const columns = [{
Header: 'Brand',
accessor: 'brand',
Cell: props => editableCell(props),
Filter: selectColumnFilter,
filter: 'includes'
}]
const selectColumnFilter = props => {
const options = data.cars.filter((car, i) => {
return i === data.cars.findIndex(obj => {
return car[props.column.id] === obj[props.column.id];
})
}); // Gets the requested option values
return <select onChange={e => {console.log(e.target.value)}}>
<option value="">All</option>
{options.map((option, i) => <option key={i} value={option[props.column.id]}>{option[props.column.id]}</option>)}
</select> // Prints the select
}
在selectColumnFilter
函数内部,我将列信息作为props
参数传递。从props
对象中我获取id
和过滤汽车数组
return <ReactTable
ref={(r) => setReactTable(r)}
data={data.cars}
columns={columns}
filterable={filterable}
pages={pages}
loading={loading}
defaultPageSize={pageSize}
className="-striped -highlight"
/>
现在我只需要弄清楚如何将值设置为“过滤”,然后更新表格视图。
解决方案
最后才想通。
过滤器将props
对象传递给自定义过滤器(在这种情况下selectColumnFilter
)。
我所要做的就是将道具的 onChange 方法附加到返回的元素(在本例中为选择元素)
const selectColumnFilter = props => {
const options = data.cars.filter((car, i) => {
return i === data.cars.findIndex(obj => {
return car[props.column.id] === obj[props.column.id];
})
});
// attach the onChange method from props's object to element
return <select onChange={(e) => props.onChange(e.target.value)}>
<option value="">All</option>
{options.map((option, i) => <option key={i} value={option[props.column.id]}>
{option[props.column.id]}</option>)}
</select>
}
请记住将元素的值传递给 onChange 方法,否则您的表格不会被过滤和更新。
推荐阅读
- python - 开发集精度比训练集精度高可以吗?
- rounding - 在 Odoo10 中使用 round 函数仍为 34.50 轮到 34
- frequency - 信道的载频、带宽和调制
- flutter - Flutter Shared element Hero Animation 不适用于自定义 ModalRoute
- jenkins - 如何在 Jenkins 中收集所有上游作业的状态
- reactjs - 如何在 redux saga 中发送 id?
- c# - unity c# 无法解析 json
- php - Laravel 上传表单返回 json
- java - CertPathValidatorException 我该如何解决这个问题?
- javascript - 画布中的动画栏