Setstate的三元运算符

时间:2018-08-30 07:19:16

标签: reactjs typescript

Setstate的三元运算符

是否可以这样做?例如,我想将一个包含正确状态的变量设置为setState。

   this.setState({
        isFiltered: isFilteredCopy,
        languagesFilter: isFilteredCopy
    });
}

我要根据要发送到的函数的状态Array是否对应来选择isFiltered还是languageFilter。

是否也可以进行多个条件三元运算?

像一般情况下,我有4种选择一样?

2 个答案:

答案 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

但是使用这种语法,只需确保首先检查哪个条件即可。