javascript - useState 创建多个数组
问题描述
我正在创建一个下拉过滤器来使用反应钩子更新页面的搜索结果。基本上,我传递了一个数组,其中包含用户从下拉菜单中选择的选项。我用新数组成功更新了全局状态,但我的问题是 useState 创建了一个新数组,而不是将结果与以前的状态合并。
上面你可以看到,我使用不同的过滤器选项进行了两次调用,全局状态现在包含 2 个数组。我的目标是将两个数组合并为一个。
这是更新全局状态的函数。
const Results = () => {
const [filterList, setFilterList] = useState([])
const setGlobalFilter = (newFilter) => {
let indexFilter = filterList.indexOf(newFilter);
// console.log("Top level index", indexFilter)
indexFilter ?
setFilterList([...new Set([...filterList, newFilter])]) :
setFilterList(filterList => filterList.filter((filter, i) => i !== indexFilter))
}
// console.log("TopFilterSelection:", filterList)
return (
<div>
<Filter setFilter={(filterList) => setGlobalFilter(filterList)}/>
</div>
)
}
我一直在检查使用 prevState 是这样的:
...
setFilterList(prevState => [...new Set([...prevState, newFilter])]) :
...
但我不知道我做错了什么。任何反馈将不胜感激!
解决方案
发生这种情况是因为newFilter
它是一个数组,而不是一个单词。应该
setFilterList(previous => [...new Set([...previous, ...newFilter])])
还有这个
let indexFilter = filterList.indexOf(newFilter);
如果是一个数组,总是返回-1 newFilter
(因为你每次都发送一个全新的数组),这不是一个虚假值,要小心
推荐阅读
- javascript - Web-NFC:如何在我的 html5 页面中使用 web-nfc
- r - search_30day() 和 search_premium() 函数的 rtweet 包中的“max_id”错误
- laravel - 想集成 Shiprocket APi 在 PHP/Laravel 中创建自定义订单
- r - R循环构造根据前后信息行查找当前行
- google-colaboratory - 在google colab中打开笔记本时出现api问题
- powershell - Powershell 将环境变量设置为 $false 导致奇怪的行为
- python - 我想当我输入搜索词时,它会搜索所有网站和浏览器并显示结果
- python - 正确答案后如何停止(PYTHON)
- python - 如何使用 Opencv 从一个 rtsp Url 逐个视频捕获视频?
- mysql - 我可以在一个表格中选择 2 个表格数据并具有总和值吗?