1. Jika saya ingin mengintegrasikan penutupan asinkron, https://ant.design/components/modal-cn/#components -modal-demo-async, onOk harus menerima janji di this.setState({
terlihat: palsu,
konfirmasiMemuat: salah,
});
Setelah mengirimkan tindakan di dva,
menugaskan({
ketik: 'pengguna/buat',
muatan: nilai,
}); Nilai bukanlah janji, tetapi tindakan.
Solusinya adalah dengan menempatkan status visible dan confirmLoading di store.
@nickzheng coba metode ini:
Gunakan janji untuk membungkus pengiriman dalam komponen, misalnya:
new Promise((resolve, reject) => {
dispatch({
type: 'users/create',
payload: {
values,
resolve,
reject,
},
});
})
.then( res => {
console.log(res);
})
.catch( err => {
console.log(err);
})
Dan dalam efek dva, Anda dapat menulisnya seperti ini:
* create({ payload }, { put, call }) {
const { value, resolve, reject } = payload;
// 一些操作之后
if (success) {
resolve('done');
} else {
reject('error');
}
}
Gagasan sebelumnya dari @sorrycc adalah bahwa tidak perlu membungkus janji di tempat pengiriman dimulai, dan dva dapat memiliki fungsi ini, dan efek default dapat mengembalikan penyelesaian dan penolakan.
https://github.com/dvajs/dva-core/blob/0fa6888/test/effects-test.js#L332 -L365, pengiriman dukungan bawaan (EffectAction) mengembalikan Janji.
@sorrycc suka satu, tanyakan versi mana dari fitur ini yang ditambahkan? Sepertinya tidak melihat changelog?
@daskyrk dll #772
Ini didukung di dva@2 .
Setelah dukungan bawaan untuk janji, bagaimana mendefinisikan penyelesaian dan penolakan yang berlaku?
Bagaimana cara menghitung sebagai sukses, bagaimana menghitung sebagai kegagalan?
Dalam solusi yang disediakan oleh
new Promise((resolve, reject) => {
dispatch({
type: 'users/create',
payload: {
values,
resolve,
reject,
},
});
})
.then( res => {
console.log(res);
})
.catch( err => {
console.log(err);
})
Apakah janji bawaan berarti mengubah bagian atas menjadi bagian bawah?
dispatch({
type: 'users/create',
payload: {
values,
resolve,
reject,
},
})
.then(res => {
console.log(res);
})
.catch(err => {
console.log(err);
})
proyek
const { dispatch } = this.props;
dispatch({
type: 'specification/fetch',
payload: applicationId,
}).then((data) => {
console.log(data)
});
model
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 Apa yang harus dilakukan dalam situasi saya seperti di bawah ini
proyek
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)
})
model
*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 })
},
Saya pikir tidak peduli apakah backend mengembalikan kesuksesan atau ada pengecualian, itu dapat dieksekusi ke yield put({type:'updateState', fetching: false })
. Saya tahu bahwa adalah mungkin untuk mengirim pengiriman ke model untuk mengatur pengambilan dalam proyek, terlepas dari keberhasilan atau kegagalan, tetapi tampaknya tidak terlalu tepat untuk melakukannya.
Komentar yang paling membantu
@nickzheng coba metode ini:
Gunakan janji untuk membungkus pengiriman dalam komponen, misalnya:
Dan dalam efek dva, Anda dapat menulisnya seperti ini:
Gagasan sebelumnya dari @sorrycc adalah bahwa tidak perlu membungkus janji di tempat pengiriman dimulai, dan dva dapat memiliki fungsi ini, dan efek default dapat mengembalikan penyelesaian dan penolakan.