当前位置:  开发笔记 > 编程语言 > 正文

Angular 2 ngrx:如何更新嵌入在我的状态数组项中的数组?

如何解决《Angular2ngrx:如何更新嵌入在我的状态数组项中的数组?》经验,为你挑选了1个好方法。

在我的reducer中,我想添加一个像这样的数组元素:

JSON结构(收到http服务):

{
 "id": "09fabf9a-e532-4d2a-87cc-bd949a0a437f",
 "title": 'my title',
 "itemId": "6d442772-d414-46b1-8aab-a105d2bc3b38",
 "createdOn": "2017-01-12T10:12:22.987Z",
 **"replays": []**
}

所以我想添加(以及为什么不更新)这个重放数组,它位于reviews数组中.

评论阵列:

[review1,review2,review3...review(n)]

我已经有了一个用于管理评论的reducer,但是如何重播 redux方式呢?谢谢

编辑1:减少代码

xport const Reviews: ActionReducer> = (state: any[] = [], action: Action) => {
switch (action.type) {
    case GET_REVIEWS:
        return action.payload;
    case ADD_REVIEW:
        return [...state, action.payload];
    case UPDATE_REVIEW:
        let index = state.map(review => review.id).indexOf(action.payload.id);
        return [
            ...state.slice(0, index),
            Object.assign({}, state[index], action.payload),
            ...state.slice(index + 1)
        ];
    case DELETE_REVIEW:
        return state.filter(item => {
            return item.id !== action.payload;
        });
    case ADD_REPLAY:
       return 'HERE I'AM STUCK !'
    default:
        return state;
}

};



1> chrigu..:

假设您对该ADD_REPLAY操作的操作是具有审阅ID和要添加的重播的对象.为了不改变对象(重放和复习),你必须替换它们.

case ADD_REPLAY:
    let index = state.map(review => review.id).indexOf(action.payload.id);
    return [
        ...state.slice(0, index),
        Object.assign({}, state[index], {
            replays: [...state[index].replays, action.payload.replay]
        }),
        ...state.slice(index + 1)
    ];

有一个很棒的免费视频解释如何避免egghead上的阵列突变.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有