MobX - woowa-techcamp-2021/store-4 GitHub Wiki
MobX ํ๊ธ ๋ฌธ์ https://ko.mobx.js.org/README.html
React์์ MobX ๊ฒฝํ๊ธฐ https://techblog.woowahan.com/2599/
๊ฐ๋จํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ํ๊ด๋ฆฌ
-
Straightforward (์ฌ์ฉํ๊ธฐ ์ฝ๋ค)
ํ ๋น๋ฌธ์ ํตํด ์ฝ๊ฒ
state
๋ฅผ ๋ณ๊ฒฝ -
Effortless optimal rendering (๋๋๋ง ์ต์ ํํ๊ธฐ ์ฝ๋ค)
์ํ์ ์ํ๋ฅผ ์ฌ์ฉํ๋ ๊ด๊ณ๋ฅผ ์์กด ํธ๋ฆฌ (dependency tree)๋ก ๋ง๋ค๊ณ ์ํ์ ๋ฐ๋ผ ํ์ํ ๊ฒฝ์ฐ๋ง ์ฐ์ฐ
- selectors, memoization์ ์ฌ์ฉํ ์ปดํฌ๋ํธ ์ต์ ํ ์์ ์ด ํ์์์
-
Architectural freedom (๊ตฌ์กฐ์ ์์ ) UI ํ๋ ์์ํฌ ๋ฐ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ๊ด๋ฆฌ
- ์ฝ๋ ๋ถ๋ฆฌ๊ฐ ์ฌ์
- ํ ์คํธ๊ฐ ์ฌ์
import React from "react"
import ReactDOM from "react-dom"
import { makeAutoObservable } from "mobx"
import { observer } from "mobx-react"
class Timer {
secondsPassed = 0
constructor() {
makeAutoObservable(this)
}
increase() {
this.secondsPassed += 1
}
reset() {
this.secondsPassed = 0
}
}
const myTimer = new Timer()
const TimerView = observer(({ timer }) => (
<button onClick={() => timer.reset()}>Seconds passed: {timer.secondsPassed}</button>
))
ReactDOM.render(<TimerView timer={myTimer} />, document.body)
setInterval(() => {
myTimer.increase()
}, 1000)
์์์ ์ธ๊ธ๋ ์ฅ์ ์ ์ธ
- ๊ฐ์ฒด์งํฅ์ ์ธ ๊ตฌ์กฐ, ๋ก์ง๊ณผ View์ ๋ถ๋ฆฌ
- Store: ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ, ์ํ ๊ด๋ฆฌ
- Model: ๋๋ฉ์ธ ๋ก์ง ์ฒ๋ฆฌ
- Repository: Ajax ์์ฒญ ์ฒ๋ฆฌ
-
๋๋ฒ๊น ํด์ ๋ถ์ฌ
-
์์ ๋ก์ด ๊ตฌ์กฐ
- Store๊ฐ
์ํ(state)
์๋น์ฆ๋์ค ๋ก์ง
์ ํจ๊ฒ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ Store์ ์ญํ ์ด ๋ช ํํด์ผํจ - Store๊ฐ ์ธ๋ถ Store๋ฅผ ์ฐธ๊ณ ํ๊ฒ ๋๋ค๋ฉด ๋ณต์กํ ๊ตฌ์กฐ๋ฅผ ๋๊ฒ ๋จ
- Store๊ฐ