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

김건희님의 프로필 이미지

작성한 질문수

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

질문있습니다

해결된 질문

21.01.12 04:07 작성

·

184

0

안녕하세요 제로초님

 case LOAD_POSTS_SUCCESS:
      draft.loadPostsLoading = false;
      draft.loadPostsDone = true;
      draft.mainPosts = draft.mainPosts.concat(action.data);
      draft.hasMorePosts = action.data.length === 10;
      break;

만약 이 액션이 렌더링될때 실행되는 것이 아니라 버튼을 눌러서 위의 액션이 실행된다고 가정해보면

버튼을 두번 눌렀을 시 리덕스에 저장되어 있는 데이터가 동일한것이 있어도 쌓이더라구요?  

이런식으로요 

mainPosts:
0: {id: 1,  continen: 'coffie' …}
1: {id: 2,  continen: 'haha' …}
2: {id: 1,  continen: 'coffie' …}
3: {id: 2,  continen: 'haha' …}

제가 궁금한것은 버튼을 여러번 눌러서 액션이 여러번 실행되어도 이미 있는 값은 배열에 추가되지 않고 없는 값만 콘캣해서 배열에 넣고 싶거든요... 그래서 강의에서 했던 다른 액션들에 쓰인방법을 시도하고 필터도 써보고 여러가지것을 시도해보고 하루동안 투자해봤는데도 안되더라구요...  문제는 저 배열에 있는 값의 아이디를 전부 조회해야하는 것인것 같은데 그걸 성공을 못시키네요 ㅜ  어떤식으로 코드를 짜야 할지 궁금합니다 !!

답변 3

0

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

2021. 01. 12. 14:51

length 오타입니다. 그리고 draft.mainPosts.push(action.data) 하면 되지 않을까요?

0

김건희님의 프로필 이미지
김건희
질문자

2021. 01. 12. 13:52

제로초님

        case COOK_UP_SUCCESS
        draft.loadPostsLoading = false;
        draft.loadPostsDone = true;
        for(let i = 0i <action.data.legnthi++) {
        if ( action.data[i].id !== draft.mainPosts[i].id ){
        draft.mainPosts = draft.mainPosts.concat(action.data[i]);
        }}
        draft.hasMorePosts = action.data.length === 10;
        break;


        case COOK_UP_SUCCESS
        draft.loadPostsLoading = false;
        draft.loadPostsDone = true;
        const ha = draft.mainPosts
        for(let i = 0i <action.data.legnthi++) {
        if ( action.data[i].id !== ha[i].id ){
        draft.mainPosts = draft.mainPosts.concat(action.data[i]);
        }}
        draft.hasMorePosts = action.data.length === 10;
        break;


        case COOK_UP_SUCCESS
        draft.loadPostsLoading = false;
        draft.loadPostsDone = true;
        const ha = draft.mainPosts
        for(let i = 0i <action.data.legnthi++) {
        if ( action.data[i].id !== ha[i].id ){
        draft.mainPosts = ha.concat(action.data[i]);
        }}

        draft.hasMorePosts = action.data.length === 10;
        break;

이러한 방식들로 for문을 돌려봤는데 데이터가 하나도 안들어오네요 ㅜ 리듀서 안에서 뭘 하는게 아직 익숙치 않네요 ㅜ  어떻게 해야할까요  참고로 action.data도 배열로 들어옵니당

0

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

2021. 01. 12. 04:18

for문으로 반복문 돌면서 하나하나씩 찾으셔야 합니다. id 1인 게시글 추가할거면 mainPosts에 id 1있나 찾고, id 2면 mainPosts에 id 2 있나 찾고 해서요. 2중반복문이 됩니다.