您可以使用React状态动态地入队和出队吗?

时间:2019-06-11 04:20:55

标签: javascript reactjs ecmascript-6

我正在尝试用我的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();
            //}
          }));
        }

1 个答案:

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