我正在尝试用我的React状态创建游戏对象的对象。我想动态地进行操作,因此不必硬编码能够玩的玩家数量。有没有办法通过JS FIFO队列来实现这种状态更改?
在我的情况下,我试图建立一个玩家队列,并在该玩家回合后将处于状态的每个玩家逐出队列。如果玩家做出正确的得分,他们将需要能够进入队伍的后排。
我不确定是否可以在setState中使用诸如dequeue()
之类的函数?如果无法执行此操作,是否可以在设置状态之前构建队列对象,然后将该结果传递给setState?
此外,我不知道React状态是否允许动态更改组件的状态对象?如果我在州内有多个玩家队列,
playerQueue = {
1: {
id: 123,
score: 5,
queued: false,
currentTurn: false
},
2: {
id: 237,
score: 7,
queued: true,
currentTurn: false
},
3: {
id: 488,
score: null,
queued: true,
currentTurn, true
}
状态允许我按照该对象结构动态添加所需的玩家吗?
这里大致是我现在所拥有的。 maximumScore setState可以正常工作。我不确定如何进行玩家排队。我实质上是在更新计分板。我还需要执行此操作才能将状态更改为下一位玩家。
if (score > tableHighScore) {
this.setState(prevState => ({
highestScore: {
score: score,
player: player,
tableHighScore: score
},
//playerQueue: {
// ...prevState, dequeue();
//}
}));
}
答案 0 :(得分:1)
我认为您可以使用Map代替普通对象
const m = new Map();
m.set('key1', { id: 12, ... })
m.set('key2', { id: 12, ... })
// get the first entry
const firstEntry = m.entries().next().value // [ 'key1', {} ]
m.delete(firstEntry[0])
// add to the map
m.set('key3', {})
,并且每次要修改地图时,都必须先将其克隆
const newMap = new Map(existingMap)