在react / redux中交换值 - 只能运行一次

时间:2018-03-11 17:48:16

标签: reactjs redux react-redux

我正在使用react / redux构建一个双人游戏。总有一个玩家轮到他了。转牌需要在两者之间定期改变。

我有以下减速机。它工作一次,然后停止工作。

   case CHANGE_TURN:
      if (playerTurn === 1) {
        newPlayerTurn = 2;
        newOtherPlayer = 1;
      }
      else {
        newPlayerTurn = 1;
        newOtherPlayer = 2;
      }
      return {
        ...state,
        otherPlayerID: newOtherPlayer,
        playerTurnID: newPlayerTurn
      }

由于这部​​分过去曾有过工作,我想也许还有其他东西会阻碍????

3 个答案:

答案 0 :(得分:2)

我认为答案已被接受,但您也可以通过以下方式最小化您的交换操作:

[newPlayerTurn, newOtherPlayer] = [newOtherPlayer, newPlayerTurn];

答案 1 :(得分:1)

您可能忘记在playerTurn1之间交替2,方法是将其返回状态。此外,案例可以简化:

case CHANGE_TURN:
    return {
        ...state,
        playerTurn: state.playerTurn === 1 ? 2 : 1,
        otherPlayerID: state.playerTurn === 1 ? 1 : 2,
        playerTurnID: state.playerTurn === 1 ? 2 : 1,
    };

playerTurnplayerTurnID是多余的btw,但也许您的示例已经过简化。

如果它严格地总是只有两个玩家,那么一个布尔值足以模拟整个状态:

case CHANGE_TURN:
    return { activePlayer: !state.activePlayer };

initialState { activePlayer: false }。然后你可以编写像

这样的选择器
const isPlayer1Active = (state) => !state.activePlayer; // false = player1's turn
const isPlayer2Active = (state) => state.activePlayer; // true = player2's turn
const getActivePlayerID = (state) => state.activePlayer ? 2 : 1;

答案 2 :(得分:1)

克隆你的回购并检查出来。
您的players.js减速器,第5行是:

let playerTurn = players.playerTurnID;

但应该看起来像:

let playerTurn = state.playerTurnID;

您应该从playerTurn对象中获取state