-
Notifications
You must be signed in to change notification settings - Fork 11
Mobx
๊ธ๋ก๋ฒ ์ํ ๊ด๋ฆฌ๋ฅผ ํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
Redux์ ๊ฐ์ด ๋ฆฌ์กํธ์ ์ข ์๋ ๊ฒ์ด ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ด์์ ๋๋ฃจ๋๋ฃจ ์ฌ์ฉ์ด ๊ฐ๋ฅ ํ๋ค.
ํํ Redux์ ๋ง์ด ๋น๊ต๊ฐ ๋๋๋ฐ, Redux์ ๋นํ์ฌ ๋ฌ๋์ปค๋ธ๊ฐ ์๋์ ์ผ๋ก ๋ฎ์ผ๋ฉฐ Observer ํจํด์ ์ดํดํ๊ณ ์์ผ๋ฉด ์ฝ๊ฒ ์ฌ์ฉ ํ ์ ์๋ค.
์ฑ์์ ๊ด์ฐฐ ํ ์ ์๋ ์ํ๋ค.
Mobx๋ ํด๋น ๊ฐ์ ๊ด์ฐฐํ๋ฉฐ, ๋ณํ์ ๋ฐ๋ฅธ notify๋ฅผ ํ๋ค.
state์ ๋ณํ๊ฐ ์๊ฒผ์ ๋, ๊ทธ state์ ๋ฐ๋ผ ์ถ๊ฐ์ ์ธ ์ฐ์ฐ ์์ ์ ์ํํ๊ฒ ๋๋ค.
ex) ์ฅ๋ฐ๊ตฌ๋์ ํญ๋ชฉ์ด ์ถ๊ฐ ๋์์ ๋ total์ ๊ณ์ฐํจ.
state์ ๋ณํ๊ฐ ์์ผ๋ฉด ๊ธฐ์กด ๊ฐ์ ์ฌ์ฉํ๋ค. (์ฑ๋ฅ ์ต์ ํ์ ๋ง์ด ์ฌ์ฉ)
์ํ์ ์ด๋ค ๋ณํ๋ฅผ ์ผ์ผํฌ ๊ฒ์ธ์ง ์ ์ ํ๋ ๋ถ๋ถ.
๋ฆฌ๋์ค์ ๋ฌ๋ฆฌ ๋ฐ๋ก ๊ฐ์ฒด๋ก ๋ง๋ค์ง๋ ์์.
computed
๋น์ทํ ๊ฐ๋
์
๋๋ค. ํ์ง๋ง computed๋ ํน์ ๊ฐ์ ์ฐ์ฐํ๋ค๋ฉด, Reactions๋ ํน์ ๋ก์ง์ ์ํํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
ex) ๊ฐ์ด ๋ณ๊ฒฝ ๋์์ ๋ log๋ฅผ ์ฐ์ .
import {observable} from 'mobx';
const values = observable ({
num1 : 1,
num2 : 2,
})
observable
๋ก ์์ฑ ๋์๊ธฐ์ Mobx์ ์ด ๊ฐ์ ๊ด์ฐฐ ํ๊ณ ์๋ค.
๋๋ฌธ์ ํด๋น ๊ฐ์ด ๋ณํ๋ฅผ ๋ฐ๋ก ํ์ง ํ๋ค.
import {observable, reaction} from 'mobx';
const values = observable ({
num1 : 1,
num2 : 2,
})
reaction (
()=> values.num1, // ๊ฐ์ง ํ๋ ํ์ผ
(value)=>{
console.log(`a๊ฐ ${value}๋ก ๋ณํจ`);
} // ๊ฐ์ง ํ ๋ก์ง
)
๊ฐ์ด ๋ณ๊ฒฝ ๋ ๋, ๊ทธ ๊ฐ์ ํ์ํ ๊ฐ์ ๋ฏธ๋ฆฌ ๊ณ์ฐ ํด๋๋ ์บ์ฑ ์์ ์ ํ๊ฒ ๋๋ค.
import {observable, computed} from 'mobx';
const values = observable ({
num1 : 1,
num2 : 2,
})
const sum = computed (()=>{
return values.num1 + values.num2
})
reaction์ด๋ computed ๋์ ์ ์ฌ์ฉ ๋ ์ ์๋ค.
autorun์ ์ ๋ฌ๋ ๊ฐ์ ์ฃผ์ํ๊ณ ์๋ค๊ฐ, ๊ทธ ๊ฐ์ด ๋ณ๊ฒฝ ๋์์ ๋ ํจ์๊ฐ ๋์ ํ๋ค.
import {observable, autorun, computed} from 'mobx';
const values = observable ({
num1 : 1,
num2 : 2,
})
let sum ;
autorun(()=>{
sum = values.num1 + values.num2
})
values.a = 10
console.log(sum)
// 12
-------
const sumComputed = computed(()=>{
return values.num2 + values.num2
})
autorun(()=> sumComputed.get())
import { decorate, observable, action, computed, autorun } from "mobx";
class Bucket {
bucket = [];
get total() {
return this.bucket.reduce((acc, cur) => acc + cur.price, 0);
}
addItem(id, name, price) {
console.log("add item");
this.bucket = [...this.bucket, { id, name, price }];
}
}
decorate(Bucket, {
bucket: observable,
total: computed,
addItem: action
});
const bucket = new Bucket();
bucket.addItem(1, "a", 20); // 'add item'
bucket.addItem(1, "a", 20); // 'add item'
bucket.addItem(1, "a", 20); // 'add item'
bucket.addItem(1, "a", 20); // 'add item'
console.log(bucket.total); // 80
addItem์ ํ ๋ ๋ง๋ค ๊ด๋ จ๋ ์ฐ์ฐ์ด ๋ฐ์ํ๋ค. ๋ง์ฝ, ๋ชจ๋ ์ก์
์ ๋ง์น๊ณ ๊ด๋ จ ์ฐ์ฐ์ด ์ผ์ด๋๊ฒ ํ๋ ค๊ณ ํ ๋, transaction
์ ์ด์ฉํ๋ฉด ๋๋ค .
import {transaction} from 'mobx'
...
transaction(()=>{
bucket.addItem(1, "a", 20);
bucket.addItem(1, "a", 20);
bucket.addItem(1, "a", 20);
bucket.addItem(1, "a", 20);
}) // 'add item' ํ๋ฒ๋ง ์ฐํ !
...
์๋ฐ์์ ์ด๋
ธํ
์ด์
๊ณผ ๊ฐ์ ์๊น์๋ก decorate
๋ฅผ ๋ฐ๋ก ์์ฑํ์ง ์๊ณ ํธํ ์
๋ ฅ ํ ์ ์๋ค.
import { transaction, observable, action, computed, autorun } from "mobx";
class Bucket {
@observable bucket = [];
@computed
get total() {
return this.bucket.reduce((acc, cur) => acc + cur.price, 0);
}
@action
addItem(id, name, price) {
console.log("add item");
this.bucket = [...this.bucket, { id, name, price }];
}
}
const bucket = new Bucket();
bucket.addItem(1, "a", 20); // 'add item'
bucket.addItem(1, "a", 20); // 'add item'
bucket.addItem(1, "a", 20); // 'add item'
bucket.addItem(1, "a", 20); // 'add item'
console.log(bucket.total); // 80
์์์ decorate
๋ฅผ ์ด ๊ฒ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ์ด๋ค.
class Todo {
@observable width = 0 ;
constructor(){
}
// @action.bound
@action
setWidth(width){
this.width = width ;
}
}
์์ ๊ฐ์ ๊ฒฝ์ฐ setwidth๋ฅผ ํ์ฌ width
๊ฐ์ ์ธํ
ํ๋ ค ํ์ง๋ง, ๋์ํ์ง ์๋๋ค. ์ฝ๋ฐฑ ํจ์๋ก this๊ฐ ๋ฐ์ธ๋ฉ ๋์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ setWidth๋ฅผ Arrow function
์ผ๋ก ๋ฐ๊พธ๊ฑฐ๋, @action.bound
๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
- API ์์
- API ์ค๊ณ
- DB ๋ชจ๋ธ๋ง
- ๊ธฐ์ ์ ์ ์ด์
- Feature list
- ํ๋ฉด ๋ช ์ธ์
- ํ๋ก์ ํธ ๊ตฌ๋ ๋ฐฉ๋ฒ
- ๊ธฐ์ ํน์ฅ์
- ์ฃผ์ ๊ธฐ๋ฅ ์๊ฐ
- Optimistic Update
- ์ํ๊ด๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํ ๊น
- Atomic Design ์ค๊ณ
- Mongoose Atomic Update ๋ฐฉ์์ ์ฐพ์์
- MobX Best Practices๋ ์ด๋์
- ๊ฑฐ๋๋ด์ญ ์คํ ์ด ๊ด๋ฆฌ
- user-account DB๊ด๊ณ ์์
- ์๋ฆผ ๊ธฐ๋ฅ ๊ตฌํ
1 ์ฃผ์ฐจ
- ๋ฐ์ผ๋ฆฌ์คํฌ๋ผ
- ํ๊ณ
2 ์ฃผ์ฐจ
- ๋ฐ์ผ๋ฆฌ์คํฌ๋ผ
- ํ๊ณ
3 ์ฃผ์ฐจ
- ๋ฐ์ผ๋ฆฌ์คํฌ๋ผ
- ํ๊ณ
4 ์ฃผ์ฐจ
5 ์ฃผ์ฐจ
- ๋ฐ์ผ๋ฆฌ์คํฌ๋ผ
- ํ๊ณ