0

状态由一个随机创建数字数组 (+ 0) 的函数进行水合,如下所示:

[[3, 0], [6, 0], [8, 0], [2, 0].....]

这就是应用程序目前的状态。[3, 0] 是包含数字 3 且不可见 (0) 的图块示例号码 (3)

所以如果我点击第一个图块,状态会变成:[[3, 1], [6, 0], [8, 0], [2, 0].....]

现在,我想添加以下内容:

  • 随时跟踪未发现的瓷砖数量(即,将 1 作为第二个元素)。

  • 将未覆盖的瓷砖数量限制为 2(如果第二个瓷砖的数量与第一个不匹配,则两者都被再次覆盖 - 许多记忆游戏具有类似的功能)

  • 如果我揭开一个瓷砖然后第二个和数字匹配,我希望它们永远保持未被揭开,我们将 +1 加到分数上。

我是否应该将其设计为主要状态的不同部分(使用不同的减速器,然后使用 combineReducers)?或者我应该重新设计状态的第一部分以包括它如下:

initialState = {
  grid: [[3,0], [4,0],...],
  score: 0,
  number_of_uncovered_tiles: 0
}

现在更改 score 和 number_of_uncovered_tiles 的值 - 我是否正确,我不应该使用操作,而是选择器,因为两者都将根据网格数组元素值的状态自动计算?

4

1 回答 1

1

通常建议保持你的状态尽可能平坦,避免由单个 reducer 操作的深度嵌套层次结构。

在你的情况下,我会拆分grid减速器和uncoveredTiles减速器。这将使您更好地控制发现瓷砖,而无需一遍又一遍地运行瓷砖阵列。

{
  grid: [ 3, 4, 9, ...],
  score: 0,
  uncoveredTiles: [ 0, 2 ],
}

这种方式在打开两个瓷砖时关闭瓷砖只是更新grid[uncoveredTiles[0]]grid[uncoveredTiles[1]]重置uncoveredTiles[].

如果您的 tile 数据变得更复杂(例如,您将用图像交换数字),则只有gridreducer 必须更改,而uncoveredTiles保持不变。

另外我会考虑引入单独的减速器,scores以免在一个地方混淆不同的逻辑问题。

于 2017-04-14T09:33:48.653 回答