이전글 "[React] Mobx-state-tree 학습하기 #6 : Views를 사용하여 모델에서 정보 보여주기"에서 이어지는 내용입니다. 참고로 이 포스팅은 제가 학습한 내용을 노트에 정리하듯이 기록하여 올리는 글이기 때문에 보팅 안해주셔서 됩니다. 많은 분들이 코딩에 흥미를 느꼈으면 좋겠습니다. ㅋ
Remove Model Instances from the Tree
7번째 레슨입니다. 이번 레슨에서는 MST의 tree semantics에 대해서 좀더 깊이 배워봅니다.
우리는 다음을 배우게 됩니다.
- 액션(Actions) 자신의 하위트리(subtree)만 변경 가능합니다.
getParent
를 사용해서 현재 모델 인스턴스의 부모를 찾아봅니다.destroy
를 사용하여 트리에서 현재 인스턴스를 완전히 제거해봅니다.
먼저 WishListItemView.js
파일을 수정합니다. WishListItemView
컴포넌트에 삭제 ❎ 버튼을 만듭니다.
src/components/WishListItemView.js
1 | class WishListItemView extends Component { |
앱을 실행하면 이제 항목에 삭제 ❎ 버튼이 보입니다. 하지만 지금은 삭제 ❎ 버튼을 눌러도 아무런 일도 일어나지 않습니다.
모델에 삭제 액션을 추가합니다.
먼저 WishListItem
모델을 수정합니다. 그리고 WishListItem
모델에 remove()
액션을 추가합니다. 자신(self)을 제거할 수 없기 때문에, remove()
액션에서 다시 부모의 remove()
액션을 호출합니다. 부모를 찾기 위해서 getParent
를 사용합니다.
src/models/WhishList.js
1 | import { types, getParent } from "mobx-state-tree"; // add here |
getParent(self, 2)
에서 2번째 인자값2
의 의미는getParent(getParent(self))
입니다. 현재 모델 트리구조가WishList: { items: [{ self }] }
이기 때문에, WishList 모델에 접근하기 위해서Parent
를 2번 수행합니다.
그다음 WishList
모델을 수정합니다. 여기에도 remove()
액션을 추가합니다.
src/models/WhishList.js
1 | export const WishList = types.model({ |
splice
는 ES6에 추가된 문법입니다. 현재 인덱스의 1개 아이템을 제거합니다. 자세한 사용방법은 mozilla 개발자 문서를 참고하세요
mobx-state-tree의 destroy
를 사용하면, remove()
를 더 간단하게 구현할 수 있습니다.
src/models/WhishList.js
1 | import { types, getParent, destroy } from "mobx-state-tree"; // add here |
실행결과