1. ๋น๋๊ธฐ์ ๋ซ๊ธฐ๋ฅผ ํตํฉ ํ๋ ค๋ฉด https://ant.design/components/modal-cn/#components -modal-demo-async, onOk๊ฐ then this.setState({
๋ณด์ด๋: ๊ฑฐ์ง,
ํ์ธ ๋ก๋ฉ: ๊ฑฐ์ง,
});
dva์์ action์ ๋์คํจ์นํ ํ,
๋ณด๋ด๋ค({
์ ํ: '์ฌ์ฉ์/๋ง๋ค๊ธฐ',
ํ์ด๋ก๋: ๊ฐ,
}); ๊ฐ์ ์ฝ์์ด ์๋๋ผ ํ๋์
๋๋ค.
ํด๊ฒฐ์ฑ ์ ์์ ์ ํ์ ๋ฐ ํ์ธ ๋ก๋ ์ค ์ํ๋ฅผ ๋๋ ๊ฒ์ ๋๋ค.
@nickzheng ์ด ๋ฐฉ๋ฒ์ ์๋ํ์ญ์์ค.
๊ตฌ์ฑ ์์์์ ๋์คํจ์น๋ฅผ โโ๋ํํ๋ ค๋ฉด promise๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
new Promise((resolve, reject) => {
dispatch({
type: 'users/create',
payload: {
values,
resolve,
reject,
},
});
})
.then( res => {
console.log(res);
})
.catch( err => {
console.log(err);
})
๊ทธ๋ฆฌ๊ณ dva์ ์ํฅ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์์ต๋๋ค.
* create({ payload }, { put, call }) {
const { value, resolve, reject } = payload;
// ไธไบๆไฝไนๅ
if (success) {
resolve('done');
} else {
reject('error');
}
}
@sorrycc์ ์ด์ ์์ด๋์ด๋ ๋์คํจ์น๊ฐ ์์๋๋ ์์น์ Promise๋ฅผ ๋ํํ ํ์๊ฐ ์๊ณ dva๊ฐ ์ด ๊ธฐ๋ฅ์ ๊ฐ์ง ์ ์๊ณ ๊ธฐ๋ณธ ํจ๊ณผ๊ฐ resolve ๋ฐ reject๋ฅผ ๋ฐํํ ์ ์๋ค๋ ๊ฒ์ด์์ต๋๋ค.
https://github.com/dvajs/dva-core/blob/0fa6888/test/effects-test.js#L332 -L365, ๋ด์ฅ ์ง์ ๋์คํจ์น(EffectAction) ๋ฐํ ์ฝ์.
@sorrycc ๊ฐ ํ๋๋ฅผ ์ข์ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ด๋ค ๋ฒ์ ์ด ์ถ๊ฐ๋์๋์ง ๋ฌผ์ด
@daskyrk ๋ฑ #772
dva@2 ์์ ์ง์๋ฉ๋๋ค.
Promise์ ๋ํ ๋ด์ฅ ์ง์ ์ดํ์ ์ด๋ป๊ฒ resolve์ reject๋ฅผ ์ค์ ๋ก ์ ์ํ ์ ์์๊น์?
์ฑ๊ณต์ผ๋ก ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ, ์คํจ๋ก ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ?
@pizn์ด ์ ๊ณต
new Promise((resolve, reject) => {
dispatch({
type: 'users/create',
payload: {
values,
resolve,
reject,
},
});
})
.then( res => {
console.log(res);
})
.catch( err => {
console.log(err);
})
๋ด์ฅ๋ ์ฝ์์ ์๋ฅผ ์๋๋ก ๋ฐ๊พธ๋ ๊ฒ์ ์๋ฏธํฉ๋๊น?
dispatch({
type: 'users/create',
payload: {
values,
resolve,
reject,
},
})
.then(res => {
console.log(res);
})
.catch(err => {
console.log(err);
})
ํ๋ก์ ํธ
const { dispatch } = this.props;
dispatch({
type: 'specification/fetch',
payload: applicationId,
}).then((data) => {
console.log(data)
});
๋ชจ๋ธ
effects: {
* fetch({ payload }, { call, put, select}) {
const response = yield call(querySpecification, payload);
yield put({
type: 'list',
payload: response
});
return yield select(state => state.specification.list); //important
}
},
reducers: {
list(state, action) {
return {
...state,
list: action.payload
};
}
}
@Youthink ์๋์ ๊ฐ์ ์ํฉ์์ํด์ผ ํ ์ผ
ํ๋ก์ ํธ
this.props.dispatch({
type: 'app/login',
payload: {
phone: '13312332131',
smscode: '6666',
}
}).then(data => {
console.log('success result', data)
}).catch(err => {
console.warn('error result', err)
})
๋ชจ๋ธ
*login({ payload }, { call, put }) {
// ่ฏทๆฑ็ถๆ fetching ไธบ true๏ผๆนไพฟ้กต้ขๆพ็คบloading็ถๆ
yield put({ type: 'updateState', fetching: true })
// ่ฟ้่ฟ่ก็ปๅฝ service
const login = yield call(authService.login, payload)
// ๅฆๆไธ้ข็ authService.login ๅผๅธธไบ๏ผไธ้ข็้ป่พๅฐฑไธไผ่ฟ่กไบ๏ผไธ้ข็ fetching ่ฎพ็ฝฎไธบ false ไนไธไผๆง่กๅฐ
if (login) {
yield put(NavigationActions.back())
Storage.set('login', login)
}
// ่ฟ้้็ฝฎไธ ็ถๆ fetching ไธบ false
yield put({type:'updateState', fetching: false })
},
๋ฐฑ์๋๊ฐ ์ฑ๊ณต์ ๋ฐํํ๋ ์์ธ๊ฐ ์๋ ์๊ด์์ด yield put({type:'updateState', fetching: false })
์คํํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฑ๊ณต๊ณผ ์คํจ์ ๊ด๊ณ์์ด ํ๋ก์ ํธ์์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ค์ ํ๊ธฐ ์ํด ๋ชจ๋ธ์ ๋์คํจ์น๋ฅผ โโ๋ณด๋ผ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ ๊ทธ๋ค์ง ์ ์ ํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@nickzheng ์ด ๋ฐฉ๋ฒ์ ์๋ํ์ญ์์ค.
๊ตฌ์ฑ ์์์์ ๋์คํจ์น๋ฅผ โโ๋ํํ๋ ค๋ฉด promise๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ dva์ ์ํฅ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์์ต๋๋ค.
@sorrycc์ ์ด์ ์์ด๋์ด๋ ๋์คํจ์น๊ฐ ์์๋๋ ์์น์ Promise๋ฅผ ๋ํํ ํ์๊ฐ ์๊ณ dva๊ฐ ์ด ๊ธฐ๋ฅ์ ๊ฐ์ง ์ ์๊ณ ๊ธฐ๋ณธ ํจ๊ณผ๊ฐ resolve ๋ฐ reject๋ฅผ ๋ฐํํ ์ ์๋ค๋ ๊ฒ์ด์์ต๋๋ค.