Dva: حاول دعم وعد الإرجاع للإرسال (EFFECT_ACTION)

تم إنشاؤها على ١٩ أكتوبر ٢٠١٦  ·  10تعليقات  ·  مصدر: dvajs/dva

التعليق الأكثر فائدة

nickzheng جرب هذه الطريقة:

استخدم الوعد لتغليف الإرسال في المكون ، على سبيل المثال:

   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 هي أنه لا توجد حاجة

ال 10 كومينتر

1. إذا كنت أرغب في دمج الإغلاق غير المتزامن ، https://ant.design/components/modal-cn/#components -modal-demo-async ، يجب أن يقبل onOk وعدًا في this.setState ({
مرئي: خطأ ،
ConfirmLoading: خطأ ،
}) ؛

بعد إرسال إجراء في dva ،
إرسال({
اكتب: "المستخدمين / إنشاء" ،
الحمولة: القيم ،
}) ؛ القيمة ليست وعدًا ، ولكنها فعل.

  1. يمكن أن يكون الحل هو وضع حالات التحميل المرئية وتأكيد التحميل في المتجر.

    1. هل من الممكن أنه بعد إرسال عمل في dva ، يكون هذا وعدًا ، و redux-thunk يعد وعدًا. قد يكون طبقي أن تنفيذ الملحمة مختلف.

nickzheng جرب هذه الطريقة:

استخدم الوعد لتغليف الإرسال في المكون ، على سبيل المثال:

   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 هي أنه لا توجد حاجة

https://github.com/dvajs/dva-core/blob/0fa6888/test/effects-test.js#L332 -L365 ، وعد بإرجاع الدعم المدمج (EffectAction).

sorrycc يحب واحدًا ، اسأل عن إصدار هذه الميزة الذي تمت إضافته؟ لا يبدو أن ترى التغيير؟

daskyrk الخ # 772

إنه مدعوم في dva @ 2 .

بعد الدعم الداخلي للوعود ، كيف نحدد الحل والرفض في الواقع؟
كيف تحسب على أنها نجاح ، وكيف تحسب على أنها فشل؟
في الحل المقدم من الحل والرفض إلى تأثير من خلال الحمولة ، ثم يتم استدعاء action.payload ، يتم استدعاء الحل ساري المفعول

   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 }) . أعلم أنه من الممكن إرسال رسالة إلى النموذج لتعيين الجلب في المشروع ، بغض النظر عن النجاح أو الفشل ، ولكن لا يبدو من المناسب جدًا القيام بذلك.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات