javascript - 如何使用 React 钩子过滤状态?
问题描述
我在安装组件时创建了一个 api req:
await fetch('/api/visited')
.then((data) => data.json())
.then((data) => setCountries(data.payload))
然后我将状态设置为国家
但是当我尝试对此进行过滤时,它会覆盖我的状态并且我会丢失所有数据。如何保留数据并制作副本?
我想我用过的预钩子prevState
<input onChange={(e) => filterCountries(e)} />
const filterCountries = (e) => {
setCountries(countries.filter((country) => country.name.includes(e.target.value)))
}
这是我尝试过的,但它是压倒一切的状态,我该如何解决这个问题?
我已经看到关于“使用原始状态”这句话的其他答案,但这来自一个 api,所以我不能这样做,除非我单独存储它,但我将有 2 个事实来源,我不想要那个
解决方案
看起来您正在覆盖从 API 调用中获得的有效负载。每次使用时,您都会为国家变量setCountries
设置一个新值。您应该做的是从countries
变量中导出过滤后的国家,并使用它来显示结果。
尝试为过滤器引入新状态
const [filter, setFilter] = useState('');
然后你输入将是
<input onChange={(e) => setFilter(e.target.value)} />
现在在您的组件正文中为过滤后的国家/地区添加一个新变量 const filtersCountries = countries ? country.filter((country) => country.name.includes(filter))) : []
并filteredCountries
在您的渲染中使用
推荐阅读
- python - 嵌套 else 和 if 方法
- javascript - 按钮没有正确禁用角度 js javascript
- ios - 如何在 Xamarin.iOS 中为 ViewController 创建类?
- python - 如何在我的代码中包含来自 argparse 的 Nargs 而不会出错?
- java - maven maven-bundle-plugin - Bundle-Version 的值无效
- javascript - 如何将有收入的交易添加到列表中?
- sql-server - 适用于 Windows 的 Docker 桌面 - 获取 Sqlcmd:'DATABASE':未知选项
- php - 使用 REST API 而不是我的简单方法有什么好处?
- cloud - 关于 AEM 中的 SlingRequestProcessor 作为云服务的问题不支持?
- google-play - 1 个应用程序如何在 2 个 admob 帐户上显示多个 app-ads.txt?