React Redux不可变的深度嵌套数组

时间:2018-09-24 11:53:50

标签: javascript json reactjs redux react-redux

我有这个结构

API的服务器响应

server response json

每个主题都必须在单独的响应中

my drawing

  1. 主题(对象)
    • 个匹配项(数组)
      • 评论(数组)

所以基本上数组有3个层次

我想在特定票据中的特定子票据中添加新的子票据

这是状态图

redux graph

这有效,但显然是可变的

state[topic_id].tickets[ticket_index].subtickets = state[topic_id].tickets[ticket_index].subtickets.concat(action.subticket);
return {...state};

这也可以使用,并且是不变的,但是会附加到第二层(ticket)

  return {
    ...state
    ,[topic_id]:{
      ...state[topic_id]
      ,tickets:[
        ...state[topic_id].tickets
        ,action.subticket
      ]
    }
  }  ;

考虑到这一点,这应该可以,但不能

  return {
    ...state
    ,[topic_id]:{
      ...state[topic_id]
      ,tickets:[
        ...state[topic_id].tickets
        ,[topic_id]:[
    ...state[topic_id].tickets[topic_id],
    subtickets:[
        ...state[topic_id].tickets[topic_id].subtickets,
        action.subticket
        ]
      ]
      ]
    }
  }

我正在尝试2天,我不知道最后一句话有什么问题

2 个答案:

答案 0 :(得分:0)

更新:这有效

import { cloneDeep } from 'lodash';

{...}

let newState = cloneDeep(state);

newState[topic_id].tickets[ticket_index].subtickets = newState[topic_id].tickets[ticket_index].subtickets.concat(action.subticket);

return newState;

据我了解,cloneDeep性能不佳

仍然,对于原始注释中的第三段代码有什么问题的答案,我们将不胜感激

答案 1 :(得分:0)

尝试以下:

d = d.rename(index=m['FUND_TOTAL_ASSETS_CRNCY'], level=0)
print (d)
                Assets
    date              
USD 2012-01-01   14.32
    2012-01-02   14.32
    2012-01-03   14.32
    2012-01-04   14.34

d['FX_price'] = d_fx.lookup(d.index.get_level_values(1), d.index.get_level_values(0))
print (d)
                Assets  FX_price
    date                        
USD 2012-01-01   14.32       1.0
    2012-01-02   14.32       1.0
    2012-01-03   14.32       1.0
    2012-01-04   14.34       1.0

希望有帮助。 谢谢