事前に私の質問を読んでくれてありがとう。私はdvaとAntDesign Mobile ofReactを使用して電話登録機能を処理しています。
確認コードを送信する前に、電話が登録されているかどうかを判断します。はいの場合、「この電話は登録されています」と乾杯します。
これで、戻り値は正しくなりました。
const mapStateToProps = (state) => {
console.log(state.register.message)
}
// {code: 221, message: "This phone has been registered"}
だから私はそれを次のように書きます:
const mapStateToProps = (state) => ({
returnData: state.register.message
})
そして、ボタンをクリックすると、アクションがディスパッチされます(リクエストが送信されます)。
getVerifyCode() {
const { form, returnData } = this.props;
const { getFieldsValue } = form;
const values = getFieldsValue();
this.props.dispatcher.register.send({
phone: values.phone,
purpose: 'register',
})
// if(returnData.code === 221){
// Toast.fail("This phone has been registered", 1);
// } else {
// Toast.success("Send verify code successfully", 1);
// }
}
しかし、戻り値に応じてif ... else条件を追加しようとしたとき
if(returnData.code === 221){
Toast.fail("This phone has been registered", 1);
} else {
Toast.success("Send verify code successfully", 1);
}
エラーを取得するためだけに:
Uncaught(in promise)TypeError:Undefinedのプロパティ 'code'を読み取れません
aynchromousの問題だと思い、asyncawaitを使おうとしました。
async getVerifyCode() {
...
await this.props.dispatcher.register.send({
phone: values.phone,
purpose: 'register',
})
}
しかし、同じエラーが発生します
未定義のプロパティ「コード」を読み取れません
なぜ、どのようにこの問題を解決するのだろうか?
追加:これはモデルです
import * as regiserService from '../services/register';
export default {
namespace: 'register',
state: {},
subscriptions: {
},
reducers: {
save(state, { payload: { data: message, code } }) {
return { ...state, message, code };
},
},
effects: {
*send({ payload }, { call, put }) {
const { data } = yield call(regiserService.sendAuthCode, { ...payload });
const message = data.message;
yield put({ type: 'save', payload: { data },});
},
},
};
モデルのハンドル条件が問題を解決しました:
*send({ payload }, { call, put }) {
const { data } = yield call(regiserService.sendAuthCode, { ...payload });
if(data.code === 221){
Toast.fail("This phone has been registered", 1);
} else {
Toast.success("Send verify code successfully", 1);
}
yield put({ type: 'save', payload: { data }});
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加