reactjs - 使用 SetState (React Native) 更好地使用条件渲染
问题描述
我正在根据特定值呈现产品列表。我正在使用 Picker 组件进行渲染,当它与 306 不同时,我正在加载选定的产品,但如果我回到第一个 PickerItem (306),我想再次显示所有产品......例如:
if (Value != '306') {
this.setState({
// isAll: false,
labels,
Colours: Value,
filteredProducts: this.state.displayProducts.filter(product => product.colour == Value)
}, () => {
this.onLoadFilteredLabels();
});
} else {
this.setState({
// isAll: true,
Colours: Value,
displayProducts: this.state.products,
displayLabels: this.state.labels
});
}
如果有更好的方法,我正在寻找一些建议?你认为我应该分开每个 setState 吗?它正在工作,但我觉得这有点棘手,我仍在学习。所以我知道我可以在这里和这里的人一起提供商品建议!
谢谢
解决方案
最简单的方法是创建一个自定义对象来设置状态并在自定义方法中传递参数。除此之外,使用三元可能是有益的:
let stateObj = value === '306' ? {obj : {
// isAll: true,
Colours: Value,
displayProducts: this.state.products,
displayLabels: this.state.labels
}, func : () => {
return false;
}} : {obj : {
// isAll: false,
labels,
Colours: Value,
filteredProducts: this.state.displayProducts.filter(product => product.colour == Value)
}, func : () => {
this.onLoadFilteredLabels();
}}
this.stateSetter(stateObj);
接下来定义您的自定义方法:
stateSetter = (stateObj) => {
let {obj, func} = stateObj;
this.setState(obj,func);
}
推荐阅读
- django - Django - 如何减少页面加载时间?获取 1000 个对象的列表并使用页面分页
- xen - 如何在“xl create”配置中指定“disk=[....]”设置?
- java - 阅读 Spring Boot in Action 一书
- javascript - 网络主机/网页 - 是否可以对用户 PC 或打开的选项卡进行键盘记录
- php - 多个数据(获取)值
- javascript - 将所有对象与函数中作为参数接收的对象分开解包
- arrays - 如何在 Angular 中使用数组设置许多下拉字段。此外,当从一个下拉字段中选择一个选项时,不得影响另一个字段
- c# - CsvHelper "HasHeaderRecord" 只得到?如何在没有标题的情况下追加?
- node.js - 如何在浏览器上模拟我的主机系统终端?
- puppet - Puppet HA 配置——将 PostgreSQL 与 Puppet Server 结合起来