【问题标题】:useState does not function correctly with Material-uiuseState 在 Material-ui 中无法正常工作
【发布时间】: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


【解决方案1】:

您需要过滤到您的 testData 数组而不是您的数据状态数组。第一次工作,因为它最初设置为 [...testData] 但之后已经被过滤。因此,当您再次运行过滤器时,您正在对过滤后的数据运行过滤器。

尝试在 testData 上运行过滤器。

 const [data, setData] = useState([...testData])
    const [value, setValue] = useState('')

    const filterValue = (value: any) => {
        if (value) {
            const filtered = testData.filter(d => value === d.cl)
            setData(filtered)
        } else {
            setData([...testData])
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-22
    • 2020-01-18
    • 2021-10-20
    • 2020-07-23
    • 1970-01-01
    • 2018-07-03
    • 2021-02-16
    • 2021-07-04
    相关资源
    最近更新 更多