โ์๊ฒ๋ ๊ฒ๊ณผ ๋๋์
๐ฅ๊ทธ๋์ ํด๋ณด๋ ์ ๋ฆฌ
1. redux-saga....... ์ด๋ ต๋ค!
ํ์ง๋ง redux-saga๋ฅผ ํ๊ธฐ์ ์ ๋์ด์ผํ๋ ํฐ ์ฐ์ด ํ๋ ์๋๋ฐ..... #๊ฐ๋ณด์๊ณ
โ Generator
function weirdFunction() {
return 1; // ๋ณดํต ํจ์๋ return์ ์ฌ๋ฌ ๋ฒ ํ ์ ์๋ค!
return 2; // ์ด ํจ์๋ ํธ์ถํ ๋ ๋ง๋ค 1๋ง ๋ฐํํ ๊ฒ์ด๋ค.
return 3;
return 4;
return 5;
}
์์ ์์์ ๋ฌ๋ฆฌ, ์ ๋๋ ์ดํฐ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ ์์ฐจ์ ์ผ๋ก ๋ฐํํ ์ ์๊ฒ ๋๋ค.
- ์ ๋๋ ์ดํฐ ํจ์๋ฅผ ๋ง๋ค ๋์๋
function*
์ด๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ๋ค. - ์ ๋๋ ์ดํฐ ํจ์๋ฅผ ํธ์ถํ๋ฉด ํ ๊ฐ์ฒด(์ ๋๋ ์ดํฐ)๊ฐ ๋ฐํ๋๋ค.
- ์ ๋๋ ์ดํฐ ํจ์๋ ๋ฐ๋ก ํธ์ถํ๋ค๊ณ ์คํ๋๋๊ฒ ์๋๊ณ ,
generator.next()
๋ฅผ ํธ์ถํด์ผ ์ฝ๋๊ฐ ์คํ๋๋ฉฐyield
๋ฅผ ๋ฐํํ๊ณ ๋ฉ์ถค
→generator.next()
๋ฅผ ๋ค์ ํธ์ถํ๋ฉด ๊ทธ ๋ค์๋ถํฐ ์ด์ด์ ๋ค์ ์์ ๋จ
โ redux-saga
๋น๋๊ธฐ์ ์ผ๋ก ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ. ์ก์ ์ ๋ชจ๋ํฐ๋ง ํ๊ณ ์๋ค๊ฐ, ํน์ ์ก์ ์ด ๋ฐ์ํ๋ฉด ์ด์ ๋ฐ๋ผ ํน์ ์์ ์ ํจ.
redux์์๋ action
์ ํ๋ฉด dispatch
ํด์ ๋ฐ๋ก state๊ฐ ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ฏ๋ก redux-saga๋ฅผ ์ฌ์ฉํ๋ค.
redux-saga๊ฐ redux-thunk๋ณด๋ค ๋ง์ด ์ฐ์ด๋ ์ด์
- ๋น๋๊ธฐ ์์ ์ ๊ธฐ์กด ์์ฒญ ์ทจ์ ๊ฐ๋ฅ
- ํน์ ์ก์ ์ด ๋ฐ์ํ์ ๋ ์ด์ ๋ฐ๋ผ ๋ค๋ฅธ ์ก์ ์ด ๋์คํจ์น ๋๊ฒ๋ ํ๊ฑฐ๋, js์ฝ๋๋ฅผ ์คํํ ์ ์์
- ์น ์์ผ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Channel์ด๋ผ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ ๋ ํจ์จ์ ์ผ๋ก ์ฝ๋ ๊ด๋ฆฌ ๊ฐ๋ฅ
- API ์์ฒญ์ด ์คํจํ์ ๋ ์ฌ์์ฒญ ์์ ๊ฐ๋ฅ
์ฌ์ฉํ๊ธฐ ์ํด์๋ intall ํ์!
$ npm install redux-saga
$ yarn add redux-saga
โ Redux-Saga effects
- delay
import { delay } from 'redux-saga/effects';
// ์๋ต
function* addTodo(action: Action) {
try {
yield delay(500);
// ์๋ต
} catch (error) {
// ์๋ต
}
}
๋ค์ ๊ตฌ๋ฌธ์ผ๋ก ์ด๋ ์ ์ ์ผ์ ์๊ฐ ๋๊ธฐํ๋ค.
- put
import { put } from 'redux-saga/effects';
// ์๋ต
function* addTodo(action: Action) {
try {
yield put(addNewTodo(action.data));
// ์๋ต
} catch (error) {
// ์๋ต
}
}
redux ์คํ ์ด์ ์ก์ ์ dispatch ํ๋ค.
- call
import { call } from 'redux-saga/effects';
// ์๋ต
function* getTodoList() {
try {
const getTodos: any = yield call(fetchTodos);
// ์๋ต
} catch (error) {
// ์๋ต
}
}
๋ค๋ฅธ saga๋ค์ด๋ promise ๋ฑ์ ํธ์ถ ํ ์ ์๋ค.
2. json-server
ํ๋ก ํธ์๋ ๊ฐ๋ฐ ์ผ์ ์ ๋ง์ถฐ์ ๋ฐฑ์๋๊ฐ ์ค๋น๋์ง ์์ ๊ฒฝ์ฐ...๐จ
๋ฐฑ์๋๊ฐ ์๋๋ผ๋ ํ๋ก ํธ ๊ฐ๋ฐ์ ๋ฉ์ถ๋ฉด ์๋๋๊น! ๊ฐ์ง API ์๋ฒ๋ฅผ ๋ง๋ค์ด ๋ด ์๋ค.
public/Data ์์ data.json์ ๋ง๋ค์ด์ ๋ด์ฉ์ ์์ฑ ํ, ์๋ ์ฝ๋๋ฅผ ์์ฑํด์ ์๋ฒ๋ฅผ ์ด์ด์ค๋๋ค.
$ npx json-server ./data.json --port 4000
์ฑ๊ณต์ ์ผ๋ก ์คํ๋๋ฉด ๊ท์ฌ์ด ์ด๋ชจํฐ์ฝ์ด ๋ฐ๊ฒจ์ค๋๋ค. ๏ผผ{^_^}/
์ด์ axios๋ fetch๋ฅผ ์ฌ์ฉํด์ ํ์์ API์์ ์์ฒญํ๋ ๊ฒ ์ฒ๋ผ ์์ ์ ํ๋ฉด ๋ฉ๋๋ค! ์ ๊ธฐํด
3. window hostsํ์ผ ์์
๐ค ํธ์คํธ ํ์ผ?
ํธ์คํธ ์ด๋ฆ์ ๋์ํ๋ IP ์ฃผ์๋ฅผ ์ ์ฅํ๊ณ ์์ด์ DNS์์ ์ฃผ์ ์ ๋ณด๋ฅผ ์ ๊ณต๋ฐ์ง ์๊ณ ๋ ์๋ฒ์ ์์น๋ฅผ ์ฐพ๊ฒ ํด์ฃผ๋ ํ์ผ!
๐ค ์ ์ฐ๋๊ฑฐ์ผ?
- ์ธํฐ๋ท ์๋ ํฅ์
- ๋ฆฌ์์ค ์ฌ์ฉ ์ค์
๐จ ํ์ง๋ง..
- ์ฌ์ดํธ ๋ฐฉ๋ฌธ์ด ์ฐจ๋จ ๋ ์ ์์
- ๊ทธ๋ฆฌ๊ณ ํด์ปคํํ ํธ๋ฆฌ๋ฉด ๋งค์ฐ ์ํํจ (๊ทธ๋์ ํธ์คํธํ์ผ ์์ ํ ๋ ๋ณด์ํ๋ก๊ทธ๋จ์ด ๊ฒฝ๊ณ ํจ)
์๋ฌดํผ ์ ๊ธฐ ๋งจ ๋ง์ง๋ง ์ค์
127.0.0.1 dummy-server.url
์ ์ถ๊ฐํ๋ฉด...!
์๊น ๋ด๊ฐ ์ด์ด์ค ๊ฐ์ง ์๋ฒ(localhost:4000)์ ์ฐ๊ฒฐํ ์ ์๋ค!
๐ ์ฐธ๊ณ (๊ฐ์ฌํฉ๋๋ค!)
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Generator
Generator - JavaScript | MDN
Generator ๊ฐ์ฒด๋ generator function ์ผ๋ก๋ถํฐ ๋ฐํ๋ ๊ฐ์ด๋ฉฐ ๋ฐ๋ณต์์ ๋ฐ๋ณต์ ํ๋กํ ์ฝ์ ์ค์ํฉ๋๋ค.
developer.mozilla.org
https://redux-saga.js.org/docs/introduction/BeginnerTutorial
Beginner Tutorial | Redux-Saga
Beginner Tutorial
redux-saga.js.org
https://react.vlpt.us/redux-middleware/10-redux-saga.html
10. redux-saga · GitBook
No results matching ""
react.vlpt.us
Redux ๋ฐ ๋ฏธ๋ค์จ์ด Redux-saga ๊ธฐ๋ณธ ์ ๋ฆฌ ๋ฐ ์ ์ฉ
Redux์ ๋ฏธ๋ค์จ์ด Redux-saga์ ๋ํด ์์๋ณด๊ณ ๊ฐ๋จํ๊ฒ ์ ์ฉํด๋ณด๊ธฐ
velog.io
https://sustainable-dev.tistory.com/94
redux-saga์ ์ฃผ์ํจ์(delay, call, put, all, takeEvery, takeLatest)
์ ํ๋ก์ ํธ์์ redux-saga๋ฅผ ์จ๋ณด๋ ค๊ณ ํ๋๋ฐ ํท๊ฐ๋ ค์ ์ฃผ๋ก ์ฐ๋ ํจ์๋ฅผ ์ ๋ฆฌํด๋ณด์๋ค. redux-saga docs ๋งํฌ(ํ๊ธ๋ฒ์ญ) ์ฝ์ด์ฃผ์ธ์ · GitBook No results matching "" mskims.github.io delay ์ค์ ๋ ์๊ฐ ์ด..
sustainable-dev.tistory.com
'๐๊ณต๋ถ > ํ๋ฆฌ์จ๋ณด๋ฉ์ฝ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ฆฌ์จ๋ณด๋ฉ์ฝ์ค] 3์ฃผ์ฐจ -๊ณผ์ 5 (0) | 2021.09.06 |
---|---|
[ํ๋ฆฌ์จ๋ณด๋ฉ์ฝ์ค] 5์ฃผ์ฐจ -๊ณผ์ 8 (0) | 2021.08.30 |
[ํ๋ฆฌ์จ๋ณด๋ฉ์ฝ์ค] 4์ฃผ์ฐจ - ๊ณผ์ 7 (0) | 2021.08.23 |
[ํ๋ฆฌ์จ๋ณด๋ฉ์ฝ์ค] 4์ฃผ์ฐจ - ๊ณผ์ 6 (0) | 2021.08.18 |
[ํ๋ฆฌ์จ๋ณด๋ฉ์ฝ์ค] 3์ฃผ์ฐจ - ๊ณผ์ 4 (0) | 2021.08.11 |
๋๊ธ