我正在学习为数组编写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));
感谢您的建议!
答案 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存储的状态尽可能正常化。这使得减速器更容易维护。如果我需要为我的观点嵌套东西,我通常会在选择器中执行此操作。
但同样,我缺乏背景,所以不确定这些建议是否与您相关。 : - )