Redux将嵌套值添加到当前状态

时间:2017-03-22 14:32:12

标签: javascript reactjs redux

我有以下状态:

{
  list: {
    key1: {
      value: [{a: 'a'}, {b: 'b'}],
      fetching: true
    },
    key2: {
      value: [{c: 'c'}],
      fetching: true
    }
  }
}

我想为某个键提供一个新值,并用此替换当前状态。但我也希望价值与前一个相结合。例如,通过以下操作:

key1: {
  value: [{d: 'd'}],
  fetching: false
}

我会得到以下状态:

{
  list: {
    key1: {
      value: [{a: 'a'}, {b: 'b'}, {d: 'd'}],
      fetching: false
    },
    key2: {
      value: [{c: 'c'}],
      fetching: true
    }
  }
}

如何在reducer中执行此操作,以便案例保持不变? (使用...点差运算符,而不是ImmutableJS)。

编辑:

处理(应该)的减速器的一部分:

case "FOO_BAR":
  const key = action.payload.key;
  const newList = {...state.list};
  newList[key] = action.payload.newObject; // {value: ..., fetching: ...}
  return {
    ...state,
    list: newList
  }

2 个答案:

答案 0 :(得分:0)

我想如何解决它

import sys
from pygtail import Pygtail

for line in Pygtail("some.log"):
    sys.stdout.write(line)

我希望它可以帮到你。

答案 1 :(得分:0)

您需要使用spread运算符来传播旧值,然后传播newObject [key]值数组。

这样的事情:

import { get } from 'lodash';

case "FOO_BAR":
  const { key, newObject } = action.payload;
  const newList = {
    ...state.list, 
    [key]: {
      value: [...get(state, 'list[key].value', []), ...newObject[key].value]
      fetching: newObject[key].fetching
    }
  };
  return {
    ...state,
    list: newList
  }

修改:我添加了the get utility function from lodash,这样如果state.list[key]undefined,它将返回一个空数组以进行传播而不是抛出错误。