我正在使用JS / React,目前我已将数组嵌套到数组中。结构如下:
<mo stretchy="false">∑</mo>
我还具有如下定义的React状态:
const ezra = ["Patriots", "Bears", "Vikings", "Titans", "Jets", "Bengals"]
const adam = ["Chiefs", "Cowboys", "Packers", "Ravens", "Broncos", "Cardinals"]
const playerList = [ezra, adam]
我正在从React中获取数据,并使用playerList.forEach来统计每个玩家下的球队的总胜利。我想找到总数和.setState来将$ {player} Wins的值更改为总计。 IE浏览器,当我希望得到ezra团队的总冠军时:
this.state{
ezraWins: 0
adamWins: 0
}
以下是我认为它可能如何工作的简明示例:
this.setState({ezraWins: counter})
但是当我console.log这些变量时,我得到了:
playerList =爱国者,熊,维京人,泰坦,喷气机,孟加拉人胜利
playerVariable =爱国者,熊,维京人,泰坦,喷气机,孟加拉人
我是否有办法在playerList中提取每个数组的名称,并将其用于代码中的.setState命令?我也尝试使用窗口进行处理,但是收到一个我没有写下来的错误,可能是因为我没有将playerList和其中的每个数组都设为全局。是这样做的方法还是有更好的方法?我的理解是全局变量是禁止的。
答案 0 :(得分:0)
这里的问题是您仅将播放器名称用作变量名称。
尝试像这样保存玩家名称:
const ezra = {name: "ezra", teams: ["Patriots", "Bears", "Vikings", "Titans", "Jets", "Bengals"]}
并像这样分配playerWins和playerVariable:
const playerWins = `${player.name}Wins`
const playerVariable = `${player.name}`
希望对您有帮助。
答案 1 :(得分:0)
花费了大量的工具,但是我发现了一种更好的方法,可以通过将所有数据置入状态来达到相同的结果。我的最终状态看起来像这样:
ezra: {name: "ezra", wins: 0,
teams: ["Patriots", "Bears", "Vikings", "Titans", "Jets", "Bengals"]},
adam: {name: "adam", wins: 0,
teams: ["Chiefs", "Cowboys", "Packers", "Ravens", "Broncos", "Cardinals"]}
根据Mike'Pomax'Kamermans的建议,我在功能开始时完整复制了this.state:
let updateState = Object.assign({}, this.state)
并这样将我的获胜总额复制到了updateState变量中:
updateState[player.name].wins = counter
其中玩家是每个玩家的状态对象的副本,即this.state.adam。引用特定的状态对象可能是比我的约定更好的方式,在约定中,我给它指定了一个与状态变量名称相同的名称prop。不过,这是我现在所知道的最好方法。
最后,在遍历所有获胜总数并将其更新为updateState之后,我使用以下命令更新了整个this.state:
this.setState(updateState)
无论如何,只要写下我如何解决这个问题,以防有人偶然发现这个试图完成我当时类似的任务的方法。我的解决方案与我原来的问题/代码有很大的出入,但我认为这是一种更好的方法。