1. Si je veux intégrer la fermeture asynchrone, https://ant.design/components/modal-cn/#components -modal-demo-async, onOk doit accepter une promesse dans alors this.setState({
visible : faux,
confirmLoading : false,
});
Après avoir envoyé une action dans dva,
envoi({
tapez:'utilisateurs/créer',
charge utile : valeurs,
}); La valeur n'est pas une promesse, mais une action.
La solution peut être de mettre les états visible et confirmLoading dans le store.
@nickzheng essayez cette méthode :
Utilisez la promesse pour envelopper la répartition dans le composant, par exemple :
new Promise((resolve, reject) => {
dispatch({
type: 'users/create',
payload: {
values,
resolve,
reject,
},
});
})
.then( res => {
console.log(res);
})
.catch( err => {
console.log(err);
})
Et dans l'effet dva, vous pouvez l'écrire comme ceci :
* create({ payload }, { put, call }) {
const { value, resolve, reject } = payload;
// 一些操作之后
if (success) {
resolve('done');
} else {
reject('error');
}
}
L' idée précédente de
https://github.com/dvajs/dva-core/blob/0fa6888/test/effects-test.js#L332 -L365, l'envoi de support intégré (EffectAction) renvoie la promesse.
@sorrycc en aime un, demandez quelle version de cette fonctionnalité a été ajoutée ? Vous n'avez pas l'air de voir le journal des modifications ?
@daskyrk etc #772
Il est pris en charge dans dva@2 .
Après la prise en charge intégrée des promesses, comment définir la résolution et le rejet en vigueur ?
Comment compter comme un succès, comment compter comme un échec ?
Dans la solution fournie par
new Promise((resolve, reject) => {
dispatch({
type: 'users/create',
payload: {
values,
resolve,
reject,
},
});
})
.then( res => {
console.log(res);
})
.catch( err => {
console.log(err);
})
La promesse intégrée signifie-t-elle transformer le haut en bas ?
dispatch({
type: 'users/create',
payload: {
values,
resolve,
reject,
},
})
.then(res => {
console.log(res);
})
.catch(err => {
console.log(err);
})
projet
const { dispatch } = this.props;
dispatch({
type: 'specification/fetch',
payload: applicationId,
}).then((data) => {
console.log(data)
});
maquette
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 Que faire dans ma situation comme ci-dessous
projet
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)
})
maquette
*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 })
},
Je pense que peu importe si le backend renvoie le succès ou s'il y a une exception, il peut être exécuté à yield put({type:'updateState', fetching: false })
. Je sais qu'il est possible d'envoyer une dépêche au modèle pour définir la récupération dans le projet, indépendamment du succès ou de l'échec, mais cela ne me semble pas très approprié de le faire.
Commentaire le plus utile
@nickzheng essayez cette méthode :
Utilisez la promesse pour envelopper la répartition dans le composant, par exemple :
Et dans l'effet dva, vous pouvez l'écrire comme ceci :
L' idée précédente de