0%

[React] Mobx-state-tree 학습하기 #5 : React에서 mobx-state-tree 모델 렌더링하기

이전글 "[React] Mobx-state-tree 학습하기 #4 : Views를 사용하여 모델에서 정보 보여주기"에서 이어지는 내용입니다. 참고로 이 포스팅은 제가 학습한 내용을 노트에 정리하듯이 기록하여 올리는 글이기 때문에 보팅 안해주셔서 됩니다. 많은 분들이 코딩에 흥미를 느꼈으면 좋겠습니다. ㅋ





Render mobx-state-tree Models in React


5번째 레슨입니다. 이번 레슨에서는 observer 래퍼를 사용하여, React 컴포넌트가 자동으로 업데이트되는 과정을 배웁니다.


우리는 다음을 배우게 됩니다.

  • mobx-react의 옵저버(observer)를 사용하여, React 컴포넌트를 업데이트하고 재렌더링하는 방법을 알아보자.
  • 컴포넌트에 모델을 사용하면 컴포넌트는 멍청해진다. 그래서 가끔 stateless function components처럼 된다.
  • mobx devtools를 사용하여, mobx-react에서 자동으로 재렌더링 해야할 최소 컴포넌트 셋트를 찾는 것을 visualize하는 방법을 알아보자.




우선 몇가지 단일 컴포넌트를 만들어 보겠습니다.

먼저 WishListItemView.js 파일을 생성합니다.

src/components/WishListItemView.js

1
2
3
4
5
6
7
8
9
10
11
import React from "react";

const WishListItemView = ({ item }) => (
<li className="item">
{item.image && <img src={item.image} alt="" />
<h3>{item.name}</h3>
<span>{item.price}</span>
</li>
);

export default WishListItemView;

그다음 components/WishListView.js 파일을 생성합니다.

src/components/WishListView.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import React from "react";

import WishListItemView from "./WishListItemView";

const WishListView = ({ wishList }) => (
<div className="list">
<ul>
{wishList.items.map((item, idx) => (
<WishListItemView key={idx} item={item} />
))}
</ul>
Total: {wishList.totalPrice} 💲
</div>
);

export default WishListView;

그리고 나서 components/App.js 파일을 생성합니다.

src/components/App.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import React from "react";

import WishListView from "./WishListView";

function App(props) {
return (
<div>
<h1 className="App-title">WishList</h1>
<WishListView wishList={props.wishList} />
</div>
);


export default App;


그리고 index.js 파일을 수정합니다.

src/index.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import React from "react";
import ReactDOM from "react-dom";

import App from "./components/App";

import { WishList } from "./models/WhishList";

const wishList = WishList.create({
items: [

name: "LEGO Mindstorems EV3",
price: 349.95,
image:
"https://www.justbricks.com.au/images/thumbnails/280/229/detailed/14/31313LEGOMINDSTORMSNXTEV3.png"
},

name: "Miracles - C.S. Lewis",
price: 12.91,
image:
"https://store.vision.org.au/5438-large_default/miracles-do-they-really-happen-c-s-lewis-paperback.jpg"

]
});

ReactDOM.render(<App wishList={wishList} />, document.getElementById("root"));

이제 앱을 실행하면 다음과 같이 보입니다.






MobX observer 사용하기

index.js 파일에 다음 코드를 추가합니다. 1초마다 가격에 변화를 주는 코드입니다.

src/index.js

1
2
3
setInterval(() => {
wishList.items[0].changePrice(wishList.items[0].price + 1);
}, 1000);

지금은 위에 코드를 입력하고 실행하면 화면에 아무런 변화가 없습니다. observer를 설정해서 컴포넌트의 데이터 변화를 감지해야합니다.


WishListView 모델에 observer를 설정합니다. observer는 모델의 데이터 변경을 감지하고 해당 컴포넌트를 재렌더링 할 것입니다.

src/components/WishListView.js

1
2
3
4
5
import { observer } from 'mobx-react'

// ...

export default observer(WishListView);


아래 화면에서 LEGO 가격이 증가하는 것이 보이나요?


오늘 수업 끝.



댓글, 팔로우, 좋아요 해 주시는 모든 분께 감사합니다.

항상 행복한 하루 보내시길 바랍니다.


vote, reblog, follow @anpigon

Originally posted on http://steemit.com