React reducer如何使用find by id更新嵌套对象?

时间:2017-11-03 03:40:11

标签: reactjs react-native redux

我有以下状态

const initialState = {
    photos: [],
    selectedPhoto:{},
    photosTeamId:'',
    photosProjectId:''
};

照片是一个有照片对象的数组,在照片对象中,有一系列评论。我正在尝试找到正确的照片,然后找到正确的评论并更新该评论。

这是我的代码

case actionTypes.COMMENT_UPDATED_TO_PHOTOS:
            console.log(action.data)
            return {
                ...state,
                photos: state.photos.map((photo) => {
                     photo.id === action.data.selectedPhotoId ? {
                        comments: photo.comments.map((comment) => {
                            console.log(comment)
                            return comment.id === action.data.commentId ? { ...comment, comment: action.data.fullComment } : comment
                        })
                    } : photo
                })
            }

1 个答案:

答案 0 :(得分:2)

代码看起来没问题,除了外部匿名函数周围的花括号。由于这些声明了一个代码块,因此在return之前应该有一个photo.is === ...语句,或者你可以简单地删除它们来获得一个表达式:

case actionTypes.COMMENT_UPDATED_TO_PHOTOS:
            console.log(action.data)
            return {
                ...state,
                photos: state.photos.map((photo) =>
                    photo.id === action.data.selectedPhotoId ? {
                        ...photo,
                        comments: photo.comments.map((comment) => {
                            console.log(comment)
                            return comment.id === action.data.commentId ? { ...comment, comment: action.data.fullComment } : comment
                        })
                    } : photo
                )
            }

更新:评论中提到的还有一个...photo,缺失。