인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

김준호님의 프로필 이미지
김준호

작성한 질문수

[리뉴얼] React로 NodeBird SNS 만들기

제로초님! 질문있습니다

작성

·

121

0

수업 열심히 듣고있습니다 제로초님! 감사합니다
댓글 구현 수업이 끝나고 onSubmit 에 대한 추가기능없이 이미지로 넘어가시길래
이후 과정을 살펴보니 saga를 이용해서 댓글 작성을 구현하시길래
수업듣기전에 먼저 아래와 같이 작성해봤습니다.
제가 알기로 map 은 새로운 참조를 갖는 객체를 반환하게 되는데,
아래와 같이 작성하면 새로운 state를 갖게 되는 것 아닌가요?
댓글이 추가되긴 하는데, 댓글 컴포넌트를 껐다 켜야 적용되는 것을 보니 불변성에 문제가 있는 것 같은데
이해가 잘 안되서 질문드리게 되었습니다.

const reducer = (state = initialState, action) => {
    switch(action.type){
        case ADD_POST:
            return {
                ...state,
                mainPosts:[dummyPost, ...state.mainPosts],
                postAdded: true,
            }
        case ADD_COMMENT:
            return {
                ...state,
                mainPosts: state.mainPosts.map(item => {
                    if(item.id === action.data.id){
                        item.Comments.unshift(action.data.comment);
                        return item;
                    }
                })
            }
        default:
            return state;
    }
}

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

map은 불변성을 지키는게 맞는데 unshift가 지키지 않습니다. unshift를 [값].concat(기존값)

이런 식으로 하셔야 합니다.

김준호님의 프로필 이미지
김준호

작성한 질문수

질문하기