Redux reducer指向(访问)嵌套状态

时间:2018-01-22 11:48:14

标签: reactjs react-native react-redux

这是我的减速机的一个问题。

   case GET_COIN_PRICE:
      return {
        ...state,
        coins: {
          ...state.coins,
          [action.coin.name]: {
            bithumbPrice: action.bithumbPrice,
            upbitPrice: action.upbitPrice,
            bittrexPrice: action.bittrexPrice
          }
        },
      }

我想将每个嵌套状态合并到每个原始状态。

(比如......州,......州政府)

这里的问题是[action.coin.name]部分。

我确实喜欢:

1

  [action.coin.name]: {
    ...state.coins.action.coin.name,
    bithumbPrice: action.bithumbPrice,
    upbitPrice: action.upbitPrice,
    bittrexPrice: action.bittrexPrice
  }

2

  [action.coin.name]: {
    ...state.coins[action.coin.name],
    bithumbPrice: action.bithumbPrice,
    upbitPrice: action.upbitPrice,
    bittrexPrice: action.bittrexPrice

然而,它返回: TypeError:无法读取未定义的“某个变量”的属性。

如何准确指出嵌套状态?

如果您对其他文件感到好奇, 有关详细信息:https://github.com/sj602/invescoin

2 个答案:

答案 0 :(得分:2)

这个问题似乎来自于stateCOins在你使用它时没有被定义的事实,你可以有条件地处理它像

case GET_COIN_PRICE:
  return {
    ...state,
    coins: {
      ...(state.coins || []),
      [action.coin.name]: {
        ...((state.coins && state.coins[action.coin.name]) || [])
        bithumbPrice: action.bithumbPrice,
        upbitPrice: action.upbitPrice,
        bittrexPrice: action.bittrexPrice
      }
    },
  }

答案 1 :(得分:0)

以下内容如何:

case GET_COIN_PRICE:
  return {
    ...state,
    coins: Object.assign({}, state.coins,
      {
        [action.coin.name]: {
          bithumbPrice: action.bithumbPrice,
          upbitPrice: action.upbitPrice,
          bittrexPrice: action.bittrexPrice
        }
      }
    })
  }