react-native redux嵌套数组reducer

时间:2017-04-06 21:33:47

标签: javascript arrays redux

我正在学习为数组编写reducer。例如,其中一个reducers将数组元素从整数更改为数组。

原始状态:

[0, 3, 5, 3, 9, 8]

动作:

case ADD_NEST:
      return state.map(i => [i, action.payload]);

新州:

[[0, 0], [3, 0], [5, 0], [3, 0], [9, 0], [8, 0]]

我正在尝试编写一个reducer,它将根据第一个元素的条件更改子数组的第二个元素。 (例如,如果子阵列的第一个元素大于3,则将第二个元素更改为1

[[0, 0], [3, 0], [5, 1], [3, 0], [9, 1], [8, 1]]

到目前为止,我已经(并没有因为我被困了):

case SET_BIT:
      return state.map(i => (i[0] > 3 ? ??? : i));

感谢您的建议!

1 个答案:

答案 0 :(得分:1)

喜欢这个吗?

case SET_BIT:
  return state.map(i => (i[0] > 3 ? [i[0], i[1] + 1] : i));

虽然,这有点奇怪/危险。如果在您的减速器的状态仍为扁平阵列时调度SET_BIT会发生什么?然后上面的代码将崩溃。然后你必须做类似的事情:

case SET_BIT:
  return state.map(i => (
    Array.isArray(i) && i[0] > 3
      ? [i[0], i[1] + 1]
      : i
  ));

我不知道你在这里要做什么的细节,但一般来说我认为最好保持一个减速器状态的结构一致。我倾向于避免在我的redux存储状态中嵌套结构,因为我试图保持我的redux存储的状态尽可能正常化。这使得减速器更容易维护。如果我需要为我的观点嵌套东西,我通常会在选择器中执行此操作。

但同样,我缺乏背景,所以不确定这些建议是否与您相关。 : - )