작성
·
273
답변 1
0
아 선생님 그러면 https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/push 이 내용을 제가 잘못 이해한걸까요 그리고
case FOLLOW_SUCCESS:
draft.followingLoading = false
draft.followingDone = true
draft.me.Followings.push({ id: action.data })
break;
이부분에서는 push를 사용해서 배열을 반환하는건 아닌걸까요?
push는 배열의 새로운 길이(length)를 반환한다고 되어있습니다. 거기다 FOLLOW_SUCCESS에서는 push가 반환하는 값을 사용하지 않습니다. immer는 draft 값을 바꿔주면 알아서 불변성을 지켜주는 라이브러리입니다.
아 선생님 연구 끝에 알아냈습니다. push를 사용하면 mainpost 밑에 새로운 배열로 더미데이터 들이 들어갑니다 그래서 concat은 새로운 더미데이터 배열 요소가 들어와도 아예 새롭게 배열로 만들어주는데 push 사용하려면 더미데이터가 나오는게 배열을 해체 시키면 concat대신에 사용가능하네요.
case LOAD_POSTS_SUCCESS:
draft.loadPostsLoading = false;
draft.loadPostsDone = true;
draft.mainPosts.push(...action.data)
draft.hasMorePosts = draft.mainPosts.length < 50;
break;
이런식으로 하니 작동이 되네요 ㅎㅎ
//push
const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
array1.push(array2);
console.log(array1);
//> Array ["a", "b", "c", Array ["d", "e", "f"]]
//concat
const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2);
console.log(array3);
//> Array ["a", "b", "c", "d", "e", "f"]
LOAD_POSTS_SUCCESS 부분에서 굳이 concat을 써야 하는이유가 있을까요 ?
불변성이 유지된다면 push를 써도 가능할것 같은데