Setstate的三元运算符
是否可以这样做?例如,我想将一个包含正确状态的变量设置为setState。
this.setState({
isFiltered: isFilteredCopy,
languagesFilter: isFilteredCopy
});
}
我要根据要发送到的函数的状态Array是否对应来选择isFiltered还是languageFilter。
是否也可以进行多个条件三元运算?
像一般情况下,我有4种选择一样?
答案 0 :(得分:6)
一种可能的方法是使用computed property name:
if (!k1.isEmpty()) {
klassenID[i] = kl.getJSONObject(0).getString("id");
}
是否也可以进行多个条件三元运算?像我一般根据情况有4种选择?
语法允许它,但是它将变得混乱。更好的选择似乎是将此选择移到单独的功能中:
this.setState({
[someCondition ? 'isFiltered' : 'languagesFilter']: isFilteredCopy
});
...然后调用此函数作为计算出的属性名称的一部分:
function getFieldName(condition) { ... }
事实上,整个模式看起来有点怪异;根据用例,也许重新设计模型可能会有所帮助。
答案 1 :(得分:2)
您可以将setState用于其更新程序,如下所示:
this.setState((prevState) => {
return true ? {isFiltered: isFilteredCopy} : {languagesFilter: isFilteredCopy}
})
啊,我忽略了不同的价值。您可以使用@ raina77ow答案,这是一种更好的方法。另外,像这样:
const filter = true && 'isFiltered' || 'languagesFilter'
this.setState({
[filter]: isFilteredCopy
});
根据您更新的问题,您可以这样使用:
const filter = (condition1 && 'isFiltered')
|| (condition2 && 'languagesFilter')
|| (condition3 && 'otherFilter')
|| 'defaultFilter' // if no condition matches
但是使用这种语法,只需确保首先检查哪个条件即可。