Reactjs 更好地使用带SetState的条件渲染(React Native)

Reactjs 更好地使用带SetState的条件渲染(React Native),reactjs,react-native,conditional,render,setstate,Reactjs,React Native,Conditional,Render,Setstate,我正在根据特定值呈现产品列表。我使用拾取组件进行渲染,当它与306不同时,我加载选定的产品,但如果我在第一个拾取项(306)返回,我希望再次显示所有产品。。。 例如: if(值!=“306”){ 这是我的国家({ //伊索尔:错, 标签, 颜色:价值, filteredProducts:this.state.displayProducts.filter(product=>product.color==Value) }, () => { 这个.onLoadFilteredLabels(); });

我正在根据特定值呈现产品列表。我使用拾取组件进行渲染,当它与306不同时,我加载选定的产品,但如果我在第一个拾取项(306)返回,我希望再次显示所有产品。。。 例如:

if(值!=“306”){
这是我的国家({
//伊索尔:错,
标签,
颜色:价值,
filteredProducts:this.state.displayProducts.filter(product=>product.color==Value)
}, () => {
这个.onLoadFilteredLabels();
});
}否则{
这是我的国家({
//伊索尔:没错,
颜色:价值,
displayProducts:this.state.products,
displayLabels:this.state.labels
});
}
我在寻找一些建议,如果有更好的方法做这件事? 你认为我应该把每个州分开吗? 这是可行的,但我觉得这有点棘手,我还在学习。所以我知道我可以在这里和这里的人分享商品建议


谢谢

您可以使用三元运算符、相等检查等,这样您的代码看起来会很干净。比如说,

this.setState({
isAll:Value=='306',
filterProducts:Value=='306'?[yourFilterProducts]:[]
});

您可以使用三元运算符、相等检查等,使代码看起来干净。比如说,

this.setState({
isAll:Value=='306',
filterProducts:Value=='306'?[yourFilterProducts]:[]
});

最简单的方法是创建一个自定义对象,用于设置状态并在自定义方法中传递参数。除此之外,使用三元合金可能是有益的:

让stateObj=value=='306'?{obj:{
//伊索尔:没错,
颜色:价值,
displayProducts:this.state.products,
displayLabels:this.state.labels
},func:()=>{
返回false;
}}:{obj:{
//伊索尔:错,
标签,
颜色:价值,
filteredProducts:this.state.displayProducts.filter(product=>product.color==Value)
},func:()=>{
这个.onLoadFilteredLabels();
}}
这是stateSetter(stateObj);
接下来定义自定义方法:

stateSetter=(stateObj)=>{
设{obj,func}=stateObj;
此设置状态(obj,func);
}

最简单的方法是创建一个自定义对象,用于设置状态并在自定义方法中传递参数。除此之外,使用三元合金可能是有益的:

让stateObj=value=='306'?{obj:{
//伊索尔:没错,
颜色:价值,
displayProducts:this.state.products,
displayLabels:this.state.labels
},func:()=>{
返回false;
}}:{obj:{
//伊索尔:错,
标签,
颜色:价值,
filteredProducts:this.state.displayProducts.filter(product=>product.color==Value)
},func:()=>{
这个.onLoadFilteredLabels();
}}
这是stateSetter(stateObj);
接下来定义自定义方法:

stateSetter=(stateObj)=>{
设{obj,func}=stateObj;
此设置状态(obj,func);
}

一般来说,如果在一个条件的不同分支中有多个
setState()
调用,就可以了

但在您的情况下,最好只在状态下更新
颜色
,并直接在
渲染
方法中过滤产品:

render(){
const{products:allProducts,colors}=this.state;
const displayProducts=Value!=“306”?allProducts.filter(product=>product.color==colors):所有产品;
返回(
{displayProducts.map(product=>)}
);
}
React文档建议,如果您可以从state或/和prop计算所需的数据,您应该这样做,而不是引入新的prop或state变量

PS:有一个常见的建议是,在
setState()中时不要引用
this.state

React批量运行
setState
,这样您就可以引用过时的状态。您应该将函数作为
setState
的第一个参数传递。更多详细信息。

通常,如果在一个条件的不同分支中有多个
setState()
调用,则没有问题

但在您的情况下,最好只在状态下更新
颜色
,并直接在
渲染
方法中过滤产品:

render(){
const{products:allProducts,colors}=this.state;
const displayProducts=Value!=“306”?allProducts.filter(product=>product.color==colors):所有产品;
返回(
{displayProducts.map(product=>)}
);
}
React文档建议,如果您可以从state或/和prop计算所需的数据,您应该这样做,而不是引入新的prop或state变量

PS:有一个常见的建议是,在
setState()中时不要引用
this.state
。 React批量运行
setState
,这样您就可以引用过时的状态。您应该将函数作为
setState
的第一个参数传递。更多细节