javascript - 如何改善 ReactJS 中的设置状态?
问题描述
我得到了一些设置为状态的信息抛出 API。这些信息必须根据我在输入中键入的内容进行过滤。当我过滤此数组状态并从输入中删除一个字母时,我无法将状态返回到前一个值,但如果我再输入一个字母,则不会过滤整个数组。
我试图引入一个所有初始信息都存在的类属性,然后根据过滤的属性设置状态。
js:
state = {
countries: [],
}
_allCountries = [];
componentDidMount() {
const { getData } = this.props;
getData()
.then(this.onCountryLoaded)
.catch(this.onError)
}
componentDidUpdate(prevProps) {
if (prevProps.matchPattern !== this.props.matchPattern) {
this.setState((_, props) => ({
countries : this._allCountries.filter(country => country.name.match(props.matchPattern))
}))
}
}
我所做的事情有效,但我觉得这不是最好的方法。我想我只需要使用国家状态而不是 allCountries 来过滤国家。
解决方案
我会建议这样的方式
state = {
countries: [],
countriesFiltered: [];
}
如果没有输入 - 只需将 countriesFiltered 设置为国家。
如果输入了任何内容 - 然后将过滤后的记录分配给 countryFiltered。
如果新词包含前一个则不需要过滤国家,您可以过滤国家过滤
就是这样。
推荐阅读
- assembly - 为什么 AL 每次都取值为零?
- android - 自定义 TextInputLayout - 内部 editText 为空
- python - 如何使我的网页抓取脚本更加健壮?
- ruby-on-rails - 在 rails 引擎中维护 schema.rb 并运行在引擎的 schema.rb 中更新的迁移
- java - 如何将值添加到范围内的位置以循环但跳过子范围?
- oracle - 带有通配符 (%) 的 LIKE 不适用于 4000char+ clob 列
- python - 在 linux 上使用 discord.py 我得到错误 'Bot' object has no attribute 'join_voice_channel'
- css - 多个多边形可能吗?
- amazon-redshift - 参数名称 系统视图中缺少信息 PG_PROC_INFO.proargnames 用于未命名的参数
- java - 如何替换两个数字之间的每个空格?