Dva: рдкреНрд░реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕реА рдХреЗ рд╡рд╛рджреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ (EFFECT_ACTION)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдЕрдХреНрддреВре░ 2016  ┬╖  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);
  })

рдФрд░ рдбреАрд╡рд╛ рдХреЗ рдкреНрд░рднрд╛рд╡ рдореЗрдВ, рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

* 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 рдХреЛ рдЗрд╕ рдореЗрдВ рдПрдХ рд╡рд╛рджрд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рджреГрд╢реНрдпрдорд╛рди: рдЭреВрдард╛,
рдкреБрд╖реНрдЯрд┐ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ: рдЭреВрдард╛,
});

рдбреАрд╡рд╛ рдореЗрдВ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж,
рдкреНрд░реЗрд╖рдг({
рдЯрд╛рдЗрдк рдХрд░реЗрдВ: 'рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛/рдмрдирд╛рдПрдВ',
рдкреЗрд▓реЛрдб: рдорд╛рди,
}); рдореВрд▓реНрдп рдПрдХ рд╡рд╛рджрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдХреНрд░рд┐рдпрд╛ рд╣реИред

  1. рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреЛрд░ рдореЗрдВ рджреГрд╢реНрдпрдорд╛рди рдФрд░ рдХрдиреНрдлрд░реНрдо рд▓реЛрдбрд┐рдВрдЧ рд╕реНрдЯреЗрдЯреНрд╕ рдбрд╛рд▓реЗрдВред

    1. рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдбреАрд╡рд╛ рдореЗрдВ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдПрдХ рд╡рд╛рджрд╛ рд╣реИ, рдФрд░ рд░реЗрдбрдХреНрд╕-рдердВрдХ рдПрдХ рд╡рд╛рджрд╛ рд╣реИред рдореЗрд░реА рдбрд┐рд╢ рдпрд╣ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдЧрд╛рдерд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрд▓рдЧ рд╣реЛред

@nickzheng рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдШрдЯрдХ рдореЗрдВ рдкреНрд░реЗрд╖рдг рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд╡рд╛рджреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

   new Promise((resolve, reject) => {
      dispatch({
         type: 'users/create',
         payload: {
             values,
             resolve,
             reject,
         },
      }); 
   })
   .then( res => {
      console.log(res);
   })
  .catch( err => {
      console.log(err);
  })

рдФрд░ рдбреАрд╡рд╛ рдХреЗ рдкреНрд░рднрд╛рд╡ рдореЗрдВ, рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

* 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/fects-test.js#L332 -L365, рдмрд┐рд▓реНрдЯ-рдЗрди рд╕рдкреЛрд░реНрдЯ рдбрд┐рд╕реНрдкреИрдЪ (рдЗрдлреЗрдХреНрдЯрдПрдХреНрд╢рди) рд░рд┐рдЯрд░реНрди рдкреНрд░реЙрдорд┐рд╕ред

@sorrycc рдПрдХ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ, рдкреВрдЫреЗрдВ рдХрд┐ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдХреМрди рд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛? рдЪреЗрдВрдЬрд▓реЙрдЧ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ?

@daskyrk рдЖрджрд┐ #772

рдпрд╣ dva@2 рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИред

рд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рдж, рд╕рдВрдХрд▓реНрдк рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рдкреНрд░рднрд╛рд╡ рдореЗрдВ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ?
рд╕рдлрд▓рддрд╛ рдХреЛ рдХреИрд╕реЗ рдЧрд┐рдиреЗрдВ, рдЕрд╕рдлрд▓рддрд╛ рдХреЛ рдХреИрд╕реЗ рдЧрд┐рдиреЗрдВ?
@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 }) рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╕рдлрд▓рддрд╛ рдпрд╛ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдХреЛ рдкреНрд░реЗрд╖рдг рднреЗрдЬрдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдЙрдЪрд┐рдд рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

mclouvem picture mclouvem  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

seamys picture seamys  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

yunfeit picture yunfeit  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

BenAnn picture BenAnn  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pengfeiWang picture pengfeiWang  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ