【发布时间】:2021-02-21 00:51:47
【问题描述】:
我有一个对象数组,每当我使用材质 ui 选择一个值时,我都会对其进行过滤以显示特定数据,但问题是在第一次选择时它可以工作并生成过滤器并向我显示所需的值,但在第二次渲染中它没有显示任何内容:
数据.js
export const testData = [
{
cl: 'peper',
cln: 'a',
},
{
cl: 'tomatoas',
cln: 'a',
},
{
cl: 'peper',
cln: 'a',
},
{
cl: 'tomatoas',
cln: 'a',
},
];
App.js:
const [data, setData] = useState([...testData])
const [value, setValue] = useState('')
const filterValue = (value: any) => {
if (value) {
const filtered = data.filter(d => value === d.cl)
setData(filtered)
} else {
setData([...testData])
}
}
const columns = [
{
title: 'cl',
field: 'cl',
filterComponent: (props: any) => {
return (
<FormControl>
<InputLabel>vegetables</InputLabel>
<Select onChange={e => filterValue(e.target.value)}>
<MenuItem value={'peper'}>peper</MenuItem>
<MenuItem value={'tomatoas'}>tomatoas</MenuItem>
</Select>
</FormControl>
)
}
},
{ title: 'cln', field: 'cln', filtering: true },
]
return (
<div className="App">
<MaterialTable
columns={columns}
data={data}
options={{
filtering: true
}}
/>
Selected: {value}
</div>
)
【问题讨论】:
-
不,实际上没有:(
-
概念还是一样的。如果它是派生数据,则不应将其存储为状态。状态应该是选定的过滤器。
标签: reactjs material-ui use-state