javascript - 在 React 方法中设置状态
问题描述
我有一个将值 (e) 传递给过滤器的 React 组件,e 将始终是以下值之一:{true, false, SHOW_ALL}。
filterItem(e) {
this.state.filter[0].Status = e.target.value;
this.setState({
filter: this.state.filter
});
}
React 抱怨我正在直接修改状态。收到此警告: 不要直接改变状态。使用 setState()
我不知道如何将过滤器状态设置为 e.target.value,并包含在 setState() 的赋值中;要设置状态,我必须将 e.target.value 分配给 Status 属性,如下所示:
this.state.filter[0].Status = e.target.value;
解决方案
filterItem(e) {
this.setState({
filter: e.target.value
});
}
this.state.filter[0].Status = e.target.value;
直接改变状态。您直接为状态分配值,而不是使用提供的setState()
函数。正如您收到的警告中所述,这违反了 React 的 3 个关键原则之一。
还有一点需要注意:Status 是一个保留字,因此您不应该将其用作属性名称。
此外,this.state.filter[0].Status
这意味着它this.state.filter
是一个数组,并且您正在更改Status
其第一个元素的属性。除非this.state.filter
需要保存多个元素/项目,每个元素/项目都有自己的Status
属性,否则您可以将其保留为this.state.filter
.
如果这是故意的,那么您可以将函数更改为:
filterItem(e) {
this.setState({
filter: [{Status: e.target.value}]
});
}
推荐阅读
- python - sqlite3.OperationalError:表书有 6 列,但提供了 5 个值
- laravel - 将 Auth 中间件应用于所有 Laravel 路由
- c++ - 如何解决 C++ 中的运算符问题?
- javascript - 如何对值进行排序并仅返回高于某个值的项目?
- javascript - 如何使用 Flask 将 Canvas url 转换为图像 numpy 数组?
- spring-integration - Spring集成Java DSL:如何使用Http.outboundGateway方法动态选择HttpMethod
- ios - 即使我设置了 TableView.separatorStyle = .none,UITableViewCell 之间的细线间隙也是可见的
- php - 修复我的 breadcrumbs.php 文件 - 它忽略了部分 URL
- java - String s = new String(s.getBytes("UTF-8"),"UTF-8"); 有什么区别?和字符串 s = new String(s.getBytes(),"UTF-8");
- r - 打印数据集摘要的内存有效方法