dva@2 ๋ ํด๋น ์์ ๋ฅผ ์ ๊ณตํ์ต๋๋ค. https://github.com/sorrycc/blog/issues/48
yield put({ type: 'addDelay', payload: { amount: 2 } });
yield take('addDelay/@<strong i="8">@end</strong>');
const count = yield select(state => state.count);
yield put({ type: 'addDelay', payload: { amount: count, delay: 0 } });
https://github.com/redux-saga/redux-saga/issues/744
์ฌ๊ธฐ์์ ์๋ฃจ์
์ ์ดํด๋ณผ ์ ์์ต๋๋ค.
๋น์ ์ ๋ถ๋ฅด๋ ํจ๊ณผ๋ฅผ ์ฐจ๋จํ๊ธฐ ์ํด ์ง์ ํธ์ถ์ ์ฌ์ฉํฉ๋๋ค.
ํ์ง๋ง dva์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฆ dva์ ์๋ ํจ๊ณผ ๋ฉ์๋๋ ๋ชจ๋ธ์ ์์ฑ๋์ด ์๊ธฐ ๋๋ฌธ์ ํธ์ถํ๋ ค๋ ํจ๊ณผ ๋ฉ์๋๋ฅผ ์ด๋ป๊ฒ ์ป์ต๋๊น? ์ค์ค๋ก ์๊ฐํ๊ณ ์ป์ ์์๋ ๋ฐฉ๋ฒ์ด ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. model.method์์ ๋์์ ๊ฐ์ ธ์จ ๋ค์ call์ ์ฌ์ฉํ์ฌ ํธ์ถํฉ๋๋ค.
@nihgwu
effect ๅๅไผ้ขๅค่งฆๅ /@<strong i="6">@start</strong> ๅ /@<strong i="7">@end</strong> ็ action๏ผ
์ด ์ฝ๋๋ saga์ ์บก์ํ๋์ด ์์ต๋๊น? ? dva์ ์์ค ์ฝ๋์์ ๋ณผ ์ ์์ต๋๋ค. ์ด ์์ค ์ฝ๋์ ์ฃผ์๋ฅผ ์๋ ค์ฃผ์ค ์ ์์ต๋๊น?
@hopperhuang dva-core
@hopperhuang dva ์ ํจ๊ณผ๋ ๋ชจ๋ธ์ ์์ฑ๋์ด ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ๊ท์ฐฎ์์ ์ด๋ป๊ฒ ๊บผ๋ด์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. @nihgwu ๋ ์ ๋ฐฉ๋ฒ์ ์ฝ์ด๋ณด๋ ๊ทธ๊ฒ ์ ๋ต์ด๋ผ๊ณ ์๊ฐํด์ ๋จผ์ ์ ํ๋ฅผ ๊ฑธ๊ณ ๋ฐ๋ก ์ ์๋ฅผ ์ฐจ๋จํฉ๋๋ค.
๋ฒ์ ์ ๊ธฐ๋กํด ๋์ญ์์ค. ์ ์๋ ์๋ฃจ์ ์ด dva2,0์ ๊ธฐ๋ฐ์ผ๋ก ํ๋์ง ์๋๋ฉด saga๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. dva1.0์ ์์ค ์ฝ๋์๋ put์ด ํธ์ถ๋๊ธฐ ์ ๊ณผ ํ์ ์ด๋ฒคํธ๊ฐ ์บก์ํ๋์ด ์์ง ์์ต๋๋ค.๋๋ จ์ ์์ฒญํ์ฌ ์์ ์ ๋ฒ์ ์ด ์ด ์๋ฃจ์ ์ ์ ์ฉํ ์ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
------์๋ณธ ๋ฉ์์ง-----
๋ณด๋ธ ์ฌ๋: "pingsoli" [email protected]
๋ณด๋ธ ๋ ์ง: 2017/ 9/ 12 22:24
๋ฐ๋ ์ฌ๋: "dvajs/dva" [email protected]
CC: "hopperhuang" [email protected] ; "๋ฉ์
" [email protected]
Topic: Re: [dvajs/dva] Excuse me. Yield put() in effects๋ non-blocking process์
๋๋ค. Effects์์ ๋ค๋ฅธ effect๋ฅผ ์ฐจ๋จํ๊ณ ํธ์ถํ๋ ๋ฐฉ๋ฒ(#1212)
@hopperhuang dva ์ ํจ๊ณผ๋ ๋ชจ๋ธ์ ์์ฑ๋์ด ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ๊ท์ฐฎ์์ ์ด๋ป๊ฒ ๊บผ๋ด์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. @nihgwu ๋ ์ ๋ฐฉ๋ฒ์ ์ฝ์ด๋ณด๋ ๊ทธ๊ฒ ์ ๋ต์ด๋ผ๊ณ ์๊ฐํด์ ๋จผ์ ์ ํ๋ฅผ ๊ฑธ๊ณ ๋ฐ๋ก ์ ์๋ฅผ ์ฐจ๋จํฉ๋๋ค.
โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์
๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ๋ณด๊ฑฐ๋ ์ค๋ ๋๋ฅผ ์์๊ฑฐํ์ธ์.
ํ์ ์ฐจ๋จํ๋ ค๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?์ฌ๊ธฐ์ ์ ์ฉ ์๋๋ฆฌ์ค๋ ๋ฌด์์ ๋๊น?
ํ์ ์ฐจ๋จํ๋ ค๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?์ฌ๊ธฐ์ ์ ์ฉ ์๋๋ฆฌ์ค๋ ๋ฌด์์ ๋๊น?
put์ ์์ ์ด saga(dva์ ํจ๊ณผ)์ ์ํด ์ฒ๋ฆฌ๋๋ฉด yield put์ด ๋ฐํ๋ ๋ ํด๋น saga/ํจ๊ณผ๊ฐ ์์ง ์คํ๋์ง ์์์ต๋๋ค(redux-saga ์ค์ผ์ค๋ฌ๊ฐ ๋๊ธฐ์ด์ ์ถ๊ฐํ๊ณ ๋์ค์ ์ ์ง์ ์ผ๋ก ์ผ์ ์ ๊ณํํจ) , ์ด๋ ์ถฉ์กฑ๋์ง ์์ต๋๋ค. ์ผ๋ถ ์ํ ํ๋ก์ธ์ค์ ์ฐจ๋จ ์๊ตฌ ์ฌํญ.
๋ด ๊ธฐ์ต์ด ๋ง๋ค๋ฉด, put ์ก์ ์ ์ด ๋ฌธ์ ์์ด ๋ฆฌ๋์์ ์ํด ์ฒ๋ฆฌ๋ฉ๋๋ค. ์๋ํ๋ฉด yield put์ด ๋ฐํ๋ ๋ ํด๋น ๋ฆฌ๋์๋ ์ด๋ฏธ ์คํ๋์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๊ฒ๋ค์ ์ค์ ๋ก redux-saga์ ์๋ฐฉ์ฑ ์ด์ง๋ง dva์์ ํจ๊ณผ๋ฅผ ์์ฑํ๋ ๋ฐฉ์์์ ์ ๋๋ ์ดํฐ ๊ธฐ๋ฅ์ ํจ๊ณผ๋ก ์ฌ์ฉ๋๋ฉฐ put ์ก์ ์ ์ํด ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค. ์ค์ ๋ก ์ก์ ์ ์ง์ ์ฒ๋ฆฌํ์ง ์์ง๋ง ๋ค๋ฅธ ์ฌ๊ฐ/์์ฑ๊ธฐ ํจ์์ ์ํด ํธ์ถ๋๋ ์์ฑ๊ธฐ ํจ์๊ฐ ๋ง์ด ์์ต๋๋ค.
๋ด ๊ฐ์ธ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ redux-saga๋ฅผ ์ง์ ์ฌ์ฉํ ๋ ์ฐ๊ธฐ ๋ฐฉ์์ผ๋ก ๋ณต์ํ๋ ๊ฒ์ ๋๋ค.์ก์ ์ ์ง์ ์๋ตํ๋ ์์ฑ๊ธฐ ๊ธฐ๋ฅ๋ง dva ํจ๊ณผ์ ๋ฃ๊ณ ๋๋จธ์ง๋ ๋ชจ๋ ๋ฌด๋ฃ์ ๋๋ค.
const model = {
// ...
effects: {
* showItem({ payload }, { call }) {
// ็จ๏ผ
yield call(showItemFirstStageProcedure)
yield call(showItemSecondStageProcedure)
// ่ไธๆฏ๏ผ
// yield put({ type: 'showItemFirstStage' })
// yield take('showItemFirstStage/@<strong i="7">@end</strong>')
// yield put({ type: 'showItemSecondStage' })
// yield take('showItemSecondStage/@<strong i="8">@end</strong>')
// ...after second stage
},
// ...
// end effects
},
// ...
// end model
}
๋ฌด๋ฃ ์์ฑ๊ธฐ ํจ์์ call
/ select
/... saga๊ฐ ํ์ํ ๋ saga์์ ์ง์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
import { effects } from 'dva/saga'
const { call, select } = effects
๊ทธ๋ฌ๋ dva๊ฐ ํด๋น ํจ๊ณผ์ ๋ฉ์๋์ ๋ํด ์ ๊ณตํ put
๋ฐ take
๋ ํ ๋ฒ ์บก์ํ๋๊ณ (์ฆ, ๋ค์์คํ์ด์ค ์ ๋์ฌ ์ฒ๋ฆฌ) ํจ๊ณผ ๋ฉ์๋๋ฅผ ํตํด ์ ๋ฌ๋์ด์ผ ํฉ๋๋ค.
https://github.com/dvajs/dva/blob/master/packages/dva-core/src/getSaga.js#L141
return { ...sagaEffects, put, take };
๋๋ ์ ์ฒด ์์ ์ ํ์ ์์ฑํ์ญ์์ค.
import { effects } from 'dva/saga'
const { take } = effects
// then
take(`${namespace}/${actionType}`)
put.resolve()๊ฐ ์ฐจ๋จ๋๊ณ ์์ต๋๋ค.
yield put.resolve({ type: 'addDelay', payload: { amount: 2 } }); const count = yield select(state => state.count); yield put({ type: 'addDelay', payload: { amount: count, delay: 0 } });
put.resolve()๊ฐ ์ฐจ๋จ ์ค์ ๋๋ค. ์์ธํ ๋ด์ฉ์ redux-saga API๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ฃ๊ธฐ๋ฅผ ์ฐจ๋จํ๋ ค๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?์ฌ๊ธฐ์์ ์ ์ฉ ์๋๋ฆฌ์ค๋ ๋ฌด์์ ๋๊น?
put์ ์์ ์ด saga(dva์ ํจ๊ณผ)์ ์ํด ์ฒ๋ฆฌ๋๋ฉด yield put์ด ๋ฐํ๋ ๋ ํด๋น saga/ํจ๊ณผ๊ฐ ์์ง ์คํ๋์ง ์์์ต๋๋ค(redux-saga ์ค์ผ์ค๋ฌ๊ฐ ๋๊ธฐ์ด์ ์ถ๊ฐํ๊ณ ๋์ค์ ์ ์ง์ ์ผ๋ก ์ผ์ ์ ๊ณํํจ) , ์ด๋ ์ถฉ์กฑ๋์ง ์์ต๋๋ค. ์ผ๋ถ ์ํ ํ๋ก์ธ์ค์ ์ฐจ๋จ ์๊ตฌ ์ฌํญ.
๋ด ๊ธฐ์ต์ด ๋ง๋ค๋ฉด, put ์ก์ ์ ์ด ๋ฌธ์ ์์ด ๋ฆฌ๋์์ ์ํด ์ฒ๋ฆฌ๋ฉ๋๋ค. ์๋ํ๋ฉด yield put์ด ๋ฐํ๋ ๋ ํด๋น ๋ฆฌ๋์๋ ์ด๋ฏธ ์คํ๋์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์, yield put(reducers)์ ๋๊ธฐ์์ด๊ณ yield put(effects)์ ๋น๋๊ธฐ์์ผ๋ก ์๋ํ์ต๋๋ค.
์ ์ง์ ๋ฃ์ ์ ์๊ณ , ํ์ ์๋ณดํด์ผ ํ๋์???
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
put.resolve()๊ฐ ์ฐจ๋จ๋๊ณ ์์ต๋๋ค.
put.resolve()๊ฐ ์ฐจ๋จ ์ค์ ๋๋ค. ์์ธํ ๋ด์ฉ์ redux-saga API๋ฅผ ์ฐธ์กฐํ์ธ์.