这是情况。我useEffect过去曾过滤一些数据,但效果很好。这是代码和codesandbox。 const data = [ {name: 'aml', age: 10}, {name: 'abcb', age: 12}, {name: 'asr', age: 20}, {name: 'plo', age: 30}, {name: 'bvcq', age: 15}, {name: 'bfro', age: 21}, {name: 'zxwh', age: 19} ]
function App() { const [keyword, setKeyword] = React.useState('') const [result, setResult] = React.useState(data) const [isAged, setIsAged] = React.useState(false) const [isNameLength3, setIsNameLength3] = React.useState(false) React.useEffect(() => { const doSearch = () => { // setResult(data) if (isAged) { setResult(result.filter(item => item.age >= 20)) } if (isNameLength3) { setResult(result.filter(item => item.name.length === 3)) } if (keyword) { setResult(result.filter(item => item.name.toLowerCase().includes(keyword.toLowerCase()))) } } doSearch() }, [isAged, keyword, isNameLength3, result]) return (
例如,我选中了两个复选框,结果将是:
asr -> 20
plo -> 30 现在我输入a,结果变为
asr -> 20 问题是,当我删除时a,我想要的结果
asr -> 20
plo -> 30 我知道result被削减了,但是我该如何实现呢?
我认为它应该搜索是否已使用原始数据更改了任何过滤器(复选框和关键字)。
所以我在一开始就尝试了useEffect。
setResult(data) 但不幸的是,它没有按我预期的那样工作。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。