如何更新状态数组中的对象?

时间:2016-11-26 12:28:36

标签: reactjs redux

所以,我有一个表格状态。

const initialState = {
 allTables: [],
 fetching: true,
 tableId: {},
};

allTables是一个包含许多表对象的状态。

allTables: Array[16]

并且每个对象都有id,current_order,表类型。

{
id: 1
type: "main"
current_order: null
}

所以,现在我所拥有的是当用户点击表格时,它会创建订单。我要添加的是,当用户单击一个表时,它会将order_id发送到reducer,并更新table对象的current_order。

  case Constants.TABLE_IS_BUSY:
        return { ...state, tableId: action.id }

  case Constants.TABLES_NEW_ORDER_CREATED:
        return Object.assign({}, state, {
            tables: state.allTables.map((id) => {
                if (state.allTables.id === state.tableId) {
                    return Object.assign({}, {
                        state.allTables.current_order: action.order
                    })
                }
                return state
            })

        })

所以为了做到这一点,我做了如上所述的减速机。单击表时,它会触发TABLE_IS_BUSY和TABLES_NEW_ORDER_CREATED。对于TABLE_IS_BUSY,我获取用户单击的表的table_id并更改stateId的值。但是对于TABLES_NEW_ORDER_CREATED,它并没有改变current_user的值......我怎么能正确地做到这一点?

提前致谢..

1 个答案:

答案 0 :(得分:1)

你不应该有:

case Constants.TABLES_NEW_ORDER_CREATED:
        return Object.assign({}, state, {
            tables: state.allTables.map((table) => {
                if (table.id === state.tableId) {
                    return Object.assign({}, table, {
                        current_order: action.order
                    })
                }
                else {
                   return Object.assign({}, table)
                }
            })
        })