如何在React中创建动态变量名?

时间:2017-11-17 18:44:45

标签: reactjs variables jsx setstate

在React中,我试图使用变量和静态文本动态创建我的状态变量名。 'level2'将由'level'文本加上一个表示什么级别的变量(selectedItem.Level + 1)创建。

this.state={
  level1:[""], // city
  level2:[""]  // township
  level3:[""]  // neighborhood 
  level4:[""]  // street
}

当用户点击某个城市时,我会填充该城市内所有乡镇的数组,依此类推。通过道具,我知道点击了什么级别。我想动态创建要更新的状态变量。

'FilteredListFromClick'是基于单击父级的子项数组。

this.setState({level2: FilteredListFromClick}) // hard coding name works, level2 is populated with a list of townships in clicked city.

var levelName = "level" + selectedItem.Level+1; // column1, column2, etc
this.setState({levelName: FilteredListFromClick}) // does not work, state is not updated, results are an empty list 

this.setState({"level"{selectedItem.Level+1}: FilteredListFromClick}) // syntax errors - I've tried playing around with different combos of (), {}, "", and so on. Ideally I would like to set my state in one line like this.

3 个答案:

答案 0 :(得分:5)

使用[]这样的括号

this.setState({["level" + (selectedItem.Level+1)]: FilteredListFromClick})

答案 1 :(得分:2)

Prakash的解决方案可以使用足够先进的EcmaScript版本。

旧式和(IMHO)稍微更具可读性的解决方案是在外部构建地图并将其传递。

const newState = {}
newState["level" + selectedItem.Level+1] = FilteredListFromClick
this.setState(newState)

答案 2 :(得分:0)

稍作调整即可将此答案更新为最新的方法:

this.setState({
    [`level${selectedItem.Level + 1}`]: FilteredListFromClick
})