# ์์
Nextjs๋ก Redux๋ฅผ ์ฌ์ฉํ๋ฉด์ Redux-saga๋ฅผ ์ฒ์ ์ ์ฉํด๋ณด๊ฒ ๋์๋ค. yield์ Generator๋ฅผ ์ฌ์ฉํด์ ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ต์ํ์ง ์์๋๋ฐ Redux-saga์ ๊ด๋ จ๋ ์๋ฃ๋ค์ ์ฐพ์ ๊ณต๋ถํ๋ค ๋ณด๋ function*์ ํค์๋๋ก ์์ํ๋ saga ํจ์๋ค์ ์๋์ํค๋ ์๋ฆฌ์ ์ด ํจ์๋ฅผ ๋ณด์กฐํ๋ watch- ํจ์๋ค์ ์ฌ์ฉ๋๋ delay, call, takeEvery ๋ฑ์ ํจ์๋ค์ด ์ ํํ ์ดํด๋์ง ์์๋ค.
ํนํ watch- ํจ์๊ฐ ์ ํ์ํ์ง ์ฌ๊ธฐ์ ์ฐ์ด๋ takeEvery์ takeLatest๊ฐ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์ง๊ฐ ์ ์ผ ํท๊ฐ๋ ธ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ๋ฆฌ๋์ค ์ฌ๊ฐ์ ํจ์๋ค์ ๋ํด ์ ๋ฆฌํ๊ธฐ๋ก ํ์๋ค.
takeEvery์ takeLatest๋ฅผ ํค์๋๋ก ๊ฒ์ํ์ ๋ ๊ฐ์ฅ ์ดํด๊ฐ ์ ๋๊ฒ ์ ๋ฆฌ๋์ด ์์ด์ ์๋ ๋ธ๋ก๊ทธ์์ ์ฐธ๊ณ ํ๋ฉด์ ์ ๋ฆฌํ์๋ค.
https://sustainable-dev.tistory.com/94
# Redux-saga์ ์ฃผ์ ํจ์
delay
์ค์ ๋ ์๊ฐ ์ดํ์ resolveํ๋ Promise ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๋ค.
ex.
delay(1000); // 1์ด ๊ธฐ๋ค๋ฆฌ๊ธฐ
put
ํน์ ์ก์ ์ dispatchํ๋๋ก ํ๋ค.
ex.
put( { type : "INCREMENT" } ); // INCREMENT action์ dispatch ํ๋ค.
takeEvery
๋ค์ด์ค๋ย ๋ชจ๋ ์ก์ ์ ๋ํด ํน์ ์์ ์ ์ฒ๋ฆฌํด ์ค๋ค.
ex.
takeEvery("INCREMENT_ASYNC", incrementAsync); // ๋ค์ด์ค๋ย ๋ชจ๋ ย INCREMENT_ASYNC ์ก์ ์ ๋ํด increaseSaga ํจ์ ์คํ
ย
ย
+ ๋ชจ๋ ์ก์ ์ ์ ํจํ๊ฒ ์ธ์ , while(true)๋ก ๊ฐ์ธ๋ ํจ๊ณผ, ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ฌ LOG_IN_REQUEST ์์ฒญ์ ๋ฐ๊ณ LOG_IN_SUCCESS๋ฅผ ์คํ์ํค๋ ๋น๋๊ธฐ ์์ ์์ takeEvery๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ค์ ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ ์ ๋ ์์ฒญ๋ง ๋ฐ๊ณ ์คํ๋์ด์ผ ํ (put๋์ด์ผ ํ ) ๋์์ด ์ดํ๋์ง ์๋๋ค.
ex.
takeLatest
๊ธฐ์กด์ ์งํ ์ค์ด๋ ์์ ์ด ์๋ค๋ฉด ์ทจ์ ์ฒ๋ฆฌํ๊ณ ๊ฐ์ฅ ๋ง์ง๋ง์ผ๋ก ์คํ๋ ์์ ๋ง ์ํํ๋ค.
ex.
takeLatest(REGISTER, registerSaga); // REGISTER ์ก์ ์ ๋ํด์ ๊ธฐ์กด์ ์งํ์ค์ด๋ ์์ ์ด ์๋ค๋ฉด ์ทจ์ ์ฒ๋ฆฌํ๊ณ ๊ฐ์ฅ ๋ง์ง๋ง์ผ๋ก ์คํ๋ ์์ ์ ๋ํด์๋ง registerSagaํจ์๋ฅผ ์คํํ๋ค. (์ค์๋ก ๋ก๊ทธ์ธ์ด๋ ํ์๊ฐ์ ๋ฒํผ์ ์ฐ๋ฌ์ ๋๋ฅด๋ ๊ฒฝ์ฐ ์๋ฒ์ ์์ฒญ์ด ์ฌ๋ฌ ๋ฒ ๊ฐ์ง ์๋๋ก ํ ๋ ์ฌ์ฉํ๋ค.
ย
ย