An open API service indexing awesome lists of open source software.

https://github.com/dl0312/state_management_tutorial

πŸ‘Ά It's time to study Redux, MobX, RxJS
https://github.com/dl0312/state_management_tutorial

mobx react redux rxjs

Last synced: 15 days ago
JSON representation

πŸ‘Ά It's time to study Redux, MobX, RxJS

Awesome Lists containing this project

README

        

# πŸ‘©β€πŸ’» State Management Tutorial

μƒνƒœ κ΄€λ¦¬μ˜ 기초λ₯Ό κ³΅λΆ€ν•©λ‹ˆλ‹€.

## Redux λ˜λŠ” MobXλ₯Ό ν†΅ν•œ μƒνƒœ 관리

### 1. μƒνƒœ 관리 라이브러리의 λ―Έν•™

μƒνƒœ 관리 λΌμ΄λΈŒλŸ¬λ¦¬λŠ” 무쑰건 ν•„μš”ν•œ 것은 μ•„λ‹ˆλ‹€. ν•˜μ§€λ§Œ 규λͺ¨κ°€ 큰 μ•±μ—μ„œλŠ” μžˆλŠ” 것이 νŽΈν•©λ‹ˆλ‹€.

> κΈ€λ‘œλ²Œ μƒνƒœ κ΄€λ¦¬λž€, μ»΄ν¬λ„ŒνŠΈ κ°„μ˜ 데이터 ꡐλ₯˜ 특히 λΆ€λͺ¨ μžμ‹ 관계가 μ•„λ‹Œ μ»΄ν¬λ„ŒνŠΈλΌλ¦¬μ˜ 데이터 ꡐλ₯˜λ₯Ό ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

μƒνƒœ 관리 라이브러리λ₯Ό λͺ¨λ₯΄κ³  μ•ˆγ…… μ“°λŠ” 것과 μ•Œκ³  μ•ˆμ“°λŠ” 것은 맀우 λ‹€λ¦…λ‹ˆλ‹€.
μƒνƒœ 관리 라이브러리λ₯Ό μ‚¬μš©ν•΄μ•Όν•˜λŠ” 이유

1. μƒνƒœ μ—…λ°μ΄νŠΈ 둜직의 뢄리
λ³΅μž‘ν•œ μƒνƒœ μ—…λ°μ΄νŠΈ λ‘œμ§λ“€μ„ μ»΄ν¬λ„ŒνŠΈμ—μ„œ λΆ„λ¦¬ν•˜μ—¬ 이λ₯Ό λͺ¨λ“ˆν™”ν•΄μ„œ μœ μ§€λ³΄μˆ˜μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€.
2. 더 μ‰¬μš΄ μƒνƒœ 관리
μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈλ₯Ό 거쳐 props을 κ±΄λ‚΄μ£ΌλŠ” 것보닀 더 μ‰½κ²Œ props을 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.
Redux, MobX λ‘˜ λ‹€ 쒋은 라이브러리이고 λ‚˜λ¦„μ˜ μž₯점과 단점이 μžˆμŠ΅λ‹ˆλ‹€. λ‘˜ λ‹€ λ°°μš°λ©΄μ„œ μ΅ν˜€λ΄…λ‹ˆλ‹€.

## μƒνƒœκ΄€λ¦¬ 라이브러리

### 2. Redux μ†Œκ°œ 및 κ°œλ…μ •λ¦¬

λ¦¬λ•μŠ€λ₯Ό μ΄μš”ν•˜μ—¬ μ‰¬μš΄ κΈ€λ‘œλ²Œ μƒνƒœ 관리λ₯Ό ν•  수 있고, 체계적이고 νŽΈλ¦¬ν•œ μƒνƒœ 관리λ₯Ό ν•  수 μžˆλ‹€.

#### μ•‘μ…˜(Action)

μƒνƒœμ— μ–΄λ–€ λ³€ν™”κ°€ ν•„μš”ν•˜κ²Œ λ λ•Œ, μ•‘μ…˜μ„ λ°œμƒμ‹œν‚¨λ‹€. ν•˜λ‚˜μ˜ 객체둜 ν‘œν˜„λ˜λ©° λ‹€μŒκ³Ό 같은 ν˜•μ‹μœΌλ‘œ μ΄λ£¨μ–΄μ Έμžˆλ‹€.

```js
{
type: "TOGGLE_VALUE";
}
```

`type`ν•„λ“œλ₯Ό ν•„μˆ˜μ μœΌλ‘œ 가지고 μžˆμ–΄μ•Όν•˜κ³ , κ·Έ μ™Έμ˜ 값듀은 개발자 λ§ˆμŒλŒ€λ‘œ 넣어쀄 수 μžˆλ‹€.

```js
{
type: "ADD_TODO",
data: {
id: 0,
text: "λ¦¬λ•μŠ€ 배우기"
}
}
```

```js
{
type: "CHANGE_INPUT",
text: "μ•ˆγ„΄"
}
```

#### μ•‘μ…˜ μƒμ„±ν•¨μˆ˜(Action Creator)

μ•‘μ…˜ μƒμ„±ν•¨μˆ˜λŠ” μ•‘μ…˜μ„ λ§Œλ“œλŠ” ν•¨μˆ˜, νŒŒλΌλ―Έν„°λ₯Ό λ°›μ•„μ™€μ„œ μ•‘μ…˜ 객체 ν˜•νƒœλ‘œ λ§Œλ“€μ–΄μ€€λ‹€.

```
function addTodo(data){
return{
type: "ADD_TODO",
data
}
}

// arrow function도 κ°€λŠ₯ν•˜λ‹€.
const changeInput = text => ({
type: "CHANGE_INPUT",
text
})
```

#### λ¦¬λ“€μ„œ(Reducer)

λ¦¬λ“€μ„œλŠ” λ³€ν™”λ₯Ό μΌμœΌν‚€λŠ” ν•¨μˆ˜λ‘œ λ‘κ°€μ§€μ˜ νŒŒλΌλ―Έν„°λ₯Ό λ°›μ•„μ˜¨λ‹€.

```js
function reducer(state, action) {
// μƒνƒœ μ—…λ°μ΄νŠΈ 둜직
return alteredState;
}
```

λ¦¬λ“€μ„œλŠ” ν˜„μž¬μ˜ μƒνƒœμ™€ 전달받은 μ•‘μ…˜μ„ μ°Έκ³ ν•˜μ—¬ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ§Œλ“€μ–΄μ„œ λ°˜ν™˜ν•œλ‹€.

#### μŠ€ν† μ–΄(Store)

λ¦¬λ•μŠ€μ—μ„œλŠ” ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‹Ή ν•˜λ‚˜μ˜ μŠ€ν† μ–΄λ₯Ό λ§Œλ“€κ²Œ λ©λ‹ˆλ‹€. μŠ€ν† μ–΄ μ•ˆμ—λŠ” ν˜„μž¬ μ•± μƒνƒœμ™€ λ¦¬λ“€μ„œκ°€ λ“€μ–΄κ°€μžˆκ³  μΆ”κ°€μ μœΌλ‘œ λͺ‡ 가지 λ‚΄μž₯ν•¨μˆ˜λ“€μ΄ μžˆλ‹€.

#### λ””μŠ€νŒ¨μΉ˜(Dispatch)

λ””μŠ€νŒ¨μΉ˜λŠ” μŠ€ν† μ–΄μ˜ λ‚΄μž₯ν•¨μˆ˜ 쀑 ν•˜λ‚˜λ‘œ μ•‘μ…˜μ„ λ°œμƒμ‹œν‚€λŠ” 것이라고 μ΄ν•΄ν•˜λ©΄ λœλ‹€. `dispatch`λΌλŠ” ν•¨μˆ˜μ— `dispatch(action)`이런 μ‹μœΌλ‘œ, μ•‘μ…˜μ„ νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬ν•œλ‹€.

ν˜ΈμΆœμ„ ν•˜λ©΄ μŠ€ν† μ–΄λŠ” λ¦¬λ“€μ„œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰μ‹œμΌœμ„œ ν•΄λ‹Ή μ•‘μ…˜μ„ μ²˜λ¦¬ν•˜λŠ” 둜직이 μžˆλ‹€λ©΄ μ•‘μ…˜μ„ μ°Έκ³ ν•˜μ—¬ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ§Œλ“€μ–΄μ€€λ‹€.

#### ꡬ독(Subscribe)

μŠ€ν† μ–΄μ˜ λ‚΄μž₯ν•¨μˆ˜ 쀑 ν•˜λ‚˜λ‘œ `subscribe`ν•¨μˆ˜λŠ” ν•¨μˆ˜ν˜•νƒœμ˜ 값을 νŒŒλΌλ―Έν„°λ‘œ λ°›μ•„μ˜¨λ‹€. `subscribe` ν•¨μˆ˜μ— νŠΉμ • ν•¨μˆ˜λ₯Ό 전달해주면 μ•‘μ…˜μ΄ λ””μŠ€νŒ¨μΉ˜ λ˜μ—ˆμ„ λ•Œλ§ˆλ‹€ 전달해쀀 ν•¨μˆ˜κ°€ ν˜ΈμΆœλœλ‹€.

- [Redux](https://redux.js.org/)
- [MobX](https://github.com/mobxjs/mobx)

## πŸ“š 참고자료

- [Redux λ₯Ό ν†΅ν•œ React μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœ 관리](https://velopert.com/3365)
- [Redux λ˜λŠ” MobX λ₯Ό ν†΅ν•œ μƒνƒœ 관리](https://velog.io/@velopert/redux-or-mobx)
1. [x] Redux (1) μ†Œκ°œ 및 κ°œλ…μ •λ¦¬
2. [x] Redux (2) λ¦¬μ•‘νŠΈ 없이 μ“°λŠ” λ¦¬λ•μŠ€
3. [x] Redux (3) λ¦¬λ•μŠ€λ₯Ό λ¦¬μ•‘νŠΈμ™€ ν•¨κ»˜ μ‚¬μš©ν•˜κΈ°
4. [x] Redux (4) Immutable.js ν˜Ήμ€ Immer.js λ₯Ό μ‚¬μš©ν•œ 더 μ‰¬μš΄ λΆˆλ³€μ„± 관리
5. [ ] MobX (1) μ‹œμž‘ν•˜κΈ°
6. [ ] MobX (2) λ¦¬μ•‘νŠΈ ν”„λ‘œμ νŠΈμ—μ„œ MobX μ‚¬μš©ν•˜κΈ°
7. [ ] MobX (3) 심화적인 μ‚¬μš© 및 μ΅œμ ν™” 방법

쒋은 글을 써주신 Veloportλ‹˜κ»˜ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.