<p>dva . рдХрд╛ рдкрд░рд┐рдЪрдп</p>

рдХреЛ рдирд┐рд░реНрдорд┐рдд 24 рдЬреВрди 2016  ┬╖  76рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: dvajs/dva

рдХреЛрдИ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рднреА рдкреБрд░рд╛рдиреЗ рд╣реИрдВред

рдбреАрд╡рд╛ рдХреНрдпреЛрдВ?

рд╕реНрд╡-рдЕрдзреНрдпрдпрди рдпрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреА рдЕрд╡рдзрд┐ рдХреЗ рдмрд╛рдж, рд╕рднреА рдХреЛ рд░реЗрдбрдХреНрд╕ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдФрд░ рдпрд╣ рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдгреАрдп рдФрд░ рддрд░реНрдХ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдорддреМрд░ рдкрд░ рдРрд╕рд╛ рд╕рд╡рд╛рд▓ рд╣реЛрддрд╛ рд╣реИ: рдмрд╣реБрдд рд╕рд╛рд░реА рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд╣реИрдВ, рдФрд░ рд░реЗрдбреНрдпреВрд╕рд░, рдЧрд╛рдерд╛ рдФрд░ рдПрдХреНрд╢рди рд╕рднреА рдЕрд▓рдЧ рд╣реЛ рдЧрдП рд╣реИрдВ (рдЙрдк-рдлрд╛рдЗрд▓реЗрдВ)ред

рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ:

  • рд╕рдВрдкрд╛рджрди рд▓рд╛рдЧрдд рдЕрдзрд┐рдХ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рд░реЗрдбреНрдпреВрд╕рд░, рдЧрд╛рдерд╛ рдФрд░ рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмреАрдЪ рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  • рд╡реНрдпрд╡рд╕рд╛рдп рдореЙрдбрд▓ (рдпрд╛ рдбреЛрдореЗрди рдореЙрдбрд▓) рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реВрдЪреА рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдЙрддреНрдкрд╛рдж рд╕реВрдЪреА рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдлрд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдФрд░ рдХреБрдЫ рдЕрдиреНрдп:

  • рдЧрд╛рдерд╛ рдХрд╛ рд▓реЗрдЦрди рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИред рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХрд┐рд╕реА рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реБрдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХрд╛рдВрдЯрд╛ -> рджреНрд░рд╖реНрдЯрд╛ -> рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ
  • рдкреНрд░рд╡реЗрд╢ рд▓реЗрдЦрди рдкрд░реЗрд╢рд╛рдиреА
  • ...

рдФрд░ рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП dva рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдбреАрд╡рд╛ рдХреНрдпрд╛ рд╣реИ?

dva рдХрд┐рд╕реА рднреА рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдкреЗрд╢ рдХрд┐рдП рдмрд┐рдирд╛ рдореМрдЬреВрджрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ (рд░реЗрдбрдХреНрд╕ + рд░рд┐рдПрдХреНрдЯ-рд░рд╛рдЙрдЯрд░ + рд░реЗрдбрдХреНрд╕-рд╕рд╛рдЧрд╛, рдЖрджрд┐) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╣рд▓реНрдХрд╛ рдкреИрдХреЗрдЬ рд╣реИ, рдФрд░ рдХреБрд▓ рдХреЛрдб 100 рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдХрдо рд╣реИред (рдПрд▓реНрдо рдФрд░ рдЪреВ рд╕реЗ рдкреНрд░реЗрд░рд┐рддред)

рдбреАрд╡реАрдП рдПрдХ рдврд╛рдВрдЪрд╛ рд╣реИ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВред рдПрдореНрдмрд░рдЬ рдХреЗ рд╕рдорд╛рди, рдпрд╣ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЛ рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЯреАрдо рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдгреАрдп рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреАрд╡реАрдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреЛрдо рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЕрдиреНрдп рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рд╣рдХрд░реНрдореА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реИрдВред

рдбреАрд╡реАрдП рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдПрдХ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдирд┐рд░реНрднрд░рддрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреИрд╕реЗ рд░рд╛рдЙрдЯрд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рдХрд╛ рдЬреЗрдПрд╕рдПрдХреНрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ (рдЧрддрд┐рд╢реАрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдПрдХ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдЬреЛ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдЧрд╛ рдмрд╛рдж рдореЗрдВ)ред

рдЗрд╕рдХрд╛ рдореВрд▓ app.model рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реЗрдбреНрдпреВрд╕рд░, рдЗрдирд┐рд╢рд┐рдпрд▓рд╕реНрдЯреЗрдЯ, рдПрдХреНрд╢рди рдФрд░ рдЧрд╛рдерд╛ рдХреЛ рдПрдХ рд╕рд╛рде рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ:

app.model({
  namespace: 'products',
  state: {
    list: [],
    loading: false,
  },
  subscriptions: [
    function(dispatch) {
      dispatch({type: 'products/query'});
    },
  ],
  effects: {
    ['products/query']: function*() {
      yield call(delay(800));
      yield put({
        type: 'products/query/success',
        payload: ['ant-tool', 'roof'],
      });
    },
  },
  reducers: {
    ['products/query'](state) {
      return { ...state, loading: true, };
    },
    ['products/query/success'](state, { payload }) {
      return { ...state, loading: false, list: payload };
    },
  },
});

рдбреАрд╡реАрдП рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЖрдо рддреМрд░ рдкрд░ sagas/products.js , reducers/products.js рдФрд░ actions/products.js рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЗрди рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВред

рдЗрди рдореЙрдбрд▓реЛрдВ рдХреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдВ: (рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА redux, redux-saga рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ)

  • рдирд╛рдо рд╕реНрдерд╛рди - rootReducer рдХреЗ рд╕рдВрдпреЛрдЬрди рдореЗрдВ рд░рд┐рдбреНрдпреВрд╕рд░ рдХреЗ рдкреНрд░рдореБрдЦ рдореВрд▓реНрдп рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ
  • рд░рд╛рдЬреНрдп - рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд╛рдЬреНрдп рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ
  • рд╕рджрд╕реНрдпрддрд╛ - [email protected] рдХреА рдПрдХ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛, рдбреЛрдо рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд, рдпрд╣рд╛рдВ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдирд╣реАрдВ рд╣реИ, рджреЗрдЦреЗрдВ: рдП рдлреЗрдпрд░рд╡реЗрд▓ рдЯреВ рдПрдлрдЖрд░рдкреА
  • рдкреНрд░рднрд╛рд╡ - рдЧрд╛рдерд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреА рд╣реИ
  • рдХрдо рдХрд░рдиреЗ рд╡рд╛рд▓реА

рдХреИрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗ

рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗрдВ:

рд░реЛрдбрдореИрдк

  • [x] devtool рд╣реЙрдЯ рд╕реНрд╡реИрдк рд╕рдкреЛрд░реНрдЯ
  • [x] рд░рд╛рдЙрдЯрд░ рдбрд╛рдпрдиреЗрдорд┐рдХ рдХреЙрдиреНрдлрд┐рдЧ рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ
  • [x] рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдЧрд╛рдерд╛ рдореЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  • [] рдкреНрд░рднрд╛рд╡ рдердВрдХ, рд╡рд╛рджрд╛, рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдФрд░ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдмрдврд╝рд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдореВрд▓ рдЙрджреНрджреЗрд╢реНрдп IE8 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдирд╛ рд╣реИ
  • [ ] рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рдкреНрд░реЗрд╖рдг рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпреЛрдЬрдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
  • [x] рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рдзрд╛рди
  • [x] рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг: todolist, antd-init рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рд▓реЛрдХрдкреНрд░рд┐рдп рдЙрддреНрдкрд╛рдж

    рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрди

рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рд╕реНрддрд░ рдХрд╛ рд╕рдорд░реНрдерди?

рдЧрд░реНрдо рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрд┐рд╕реЗ рдЕрднреА рддрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдиреНрдп рдЬреИрд╕реЗ рдХрд┐ redux-devtool, css livereload, рдЖрджрд┐ рд╕рднреА рд╕рдВрдЧрдд рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд┐рд▓реНрдб рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ?

рдХрд░ рд╕рдХрдирд╛ред

рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдкрд┐рдЫрд▓реЗ рд░реЗрдбрдХреНрд╕ + рд░реЗрдбрдХреНрд╕-рд╕рд╛рдЧрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ?

рд╣рд╛рдВред

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрдЧрддрддрд╛?

IE8 рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рдХреНрдпреЛрдВрдХрд┐ redux-saga рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред (рд╣рдо рдмрд╛рдж рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рднрд╛рд╡ рдкрд░рдд рдореЗрдВ рдердВрдХреНрд╕, рд╡рд╛рджреЛрдВ, рд╡реЗрдзрд╢рд╛рд▓рд╛рдУрдВ рдЖрджрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ)

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

redux рджреНрд╡рд╛рд░рд╛ рдЬреАрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдХреЗрд╡рд▓ рд╕реБрд╕рдорд╛рдЪрд╛рд░ рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реИред рдмрд╣реБрдд рдкреНрд░рд╢рдВрд╕рд╛! ! !

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдореИрдВрдиреЗ рдЧрд▓рддреА рд╕реЗ рдПрдХ рд╡рд┐рджреЗрд╢реА рдХреЛ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдЖрдЬ рдЗрд╕реЗ рджреЛрдмрд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛, рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рджреЗрд╢реА рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереА рдХрд┐ рдпрд╣ Alipay рдХрд╛ рд╕рд╣рдкрд╛рдареА рд╣реЛрдЧрд╛,

рд╕рднреА 76 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

redux рджреНрд╡рд╛рд░рд╛ рдЬреАрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдХреЗрд╡рд▓ рд╕реБрд╕рдорд╛рдЪрд╛рд░ рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реИред рдмрд╣реБрдд рдкреНрд░рд╢рдВрд╕рд╛! ! !

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдореИрдВрдиреЗ рдЧрд▓рддреА рд╕реЗ рдПрдХ рд╡рд┐рджреЗрд╢реА рдХреЛ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдЖрдЬ рдЗрд╕реЗ рджреЛрдмрд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛, рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рджреЗрд╢реА рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереА рдХрд┐ рдпрд╣ Alipay рдХрд╛ рд╕рд╣рдкрд╛рдареА рд╣реЛрдЧрд╛,

рдкреНрд░рднрд╛рд╡ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реИрдВ

рдХреНрдпрд╛ Alipay рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдЗрд╕ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ?

@besteric dva рдЕрднреА рдмрд╛рд╣рд░ рдЖрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдХреНрдпрд╛ рд░реЗрдбреНрдпреВрд╕рд░ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

const reducer = (state, { type, payload }) => {
  switch (type) {
    case 'products/query':
      return { ...state, loading: true, };
    case 'products/query/success':
      return { ...state, loading: false, list: payload };
    default
      return state;
  }
}

app.model({
  reducer
})

рдЗрд╕рд╕реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдХреБрдЫ рдЙрдЪреНрдЪ-рдХреНрд░рдо рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реНрддреБрддрд┐, рдореИрдВрдиреЗ рдХреБрдЫ рдбреЗрдореЛ рд▓рд┐рдЦреЗ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдореЙрдбрд▓ рдХрд╛ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
app.model(Model1); app.model(Model2);
рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рдзрд┐ рд╕рдВрдпреЛрдЬрди рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрджрд░реНрд╢ рд╣реИ
app.model([Model1,Model2])
рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛

рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рдкреНрд░реЗрд╖рдг рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ

bindActionCreators рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ?

рдХреНрдпрд╛ @yesmeck reducer рдХреЗ рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧ рдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗрд╡рд▓ redo/undo рд╣реИ? рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ dva рдмрд╣реБрдд рд▓рдЪреАрд▓рд╛ рд╣реЛ, рдФрд░ рдореИрдВ рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдбрдСрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред

рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдореВрд▓ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЗ рд╕рдорд╛рди рднрд╛рдЧреЛрдВ рдХреЛ рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд┐рдзрд┐ рдореЗрдВ рдирд┐рдХрд╛рд▓реЗрдВрдЧреЗ, рдФрд░ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ рдЬреЛ рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рд░реВрдЯ рдХреЗ рд╕рдордп рд░рд╛рдЬреНрдп рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред рдкрд░рд┐рд╡рд░реНрддрдиред , рдФрд░ рдпрд╣ https://github.com/erikras/multireducer

@ рдЯрд┐рдВрдХрд░ 404 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рдореИрдВ рдЗрд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛:

app.model(require('../models/a'));
app.model(require('../models/b'));

@JimmyLv рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ actionCreator рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ dispatch ред

@yesmeck рдареАрдХ рд╣реИ, рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╕реЛрдЪреВрдВрдЧрд╛ред

рдЙрдЪреНрдЪ-рдХреНрд░рдо рд╡рд┐рдзрд┐рдпрд╛рдБ рднреА рд╣реИрдВ рдЬреЛ рд░реВрдЯ рдмрджрд▓рдиреЗ рдкрд░ рд░рд┐рдбреНрдпреВрд╕рд░ рдХреЛ рд░рд╛рдЬреНрдп рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ subscriptions рдореЗрдВ рд░реВрдЯрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдФрд░ рдлрд┐рд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд┐рддрд┐ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рдкрд░рд┐рджреГрд╢реНрдп рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИред рдпрд╛ рдХреНрдпрд╛ рд░рд┐рдбреНрдпреВрд╕рд░ рдПрдиреНрд╣рд╛рдВрд╕рд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдлрд╛рдпрджрд╛ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рджрд╕реНрдпрддрд╛ рдореЗрдВ рд░реВрдЯрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдФрд░ рдлрд┐рд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд╛рдЬреНрдп рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рдкрд░рд┐рджреГрд╢реНрдп рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдбреНрдпреВрд╕рд░ рдЬрд┐рд╕реЗ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрд╕реЗ рд░реАрд╕реЗрдЯ рд▓реЙрдЬрд┐рдХ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рд╣рдо рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЗрд╕реЗ рдЕрднреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

combineReducers({
  products: composeReducers({  // composeReducers чЪДхоЮчО░шзБф╕ЛщЭв
    recycle(LOCATION_CHANGE, initialState),  // recycle чФицЭехЬиш╖пчФ▒хПШхМЦцЧ╢щЗНч╜очК╢цАБ
    products
  })
})

рдПрдХ рдФрд░ рдкрд░рд┐рджреГрд╢реНрдп рд╡рд╣реА рддрд░реНрдХ рд╣реИ рдЬреЛ рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рд░реЗрдбреНрдпреВрд╕рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдФрд░ рдЙрдирдХреЗ рд░рд┐рдбреНрдпреВрд╕рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:

// reducers/products.js
const reducer = (state, { type, action}) => {
  switch (type) {
    case 'products/FETCH_SUCCESS':
      return {
        ...state,
        loading: false,
        list: payload
      }
    default:
      return state
  }
}
// reducers/users.js
const reducer = (state, { type, payload}) => {
  switch (type) {
    case 'users/FETCH_SUCCESS':
      return {
        ...state,
        loading: false,
        list: payload
      }
    default:
      return state
  }
}

рдпрд╣рд╛рдВ рджреЛ рд░реЗрдбреНрдпреВрд╕рд░ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕реВрдЪреА рд░реЗрдбреНрдпреВрд╕рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

const list = (actionType) => {
  return (state, { type, payload }) => {
    switch (type) {
      case actionType:
        return {
          ...state,
          loading: false,
          list: payload
        }
        break;
      default:
        return state
    }
  }
}

рдлрд┐рд░ рд╣рдо рдЗрди 3 рд░реЗрдбреНрдпреВрд╕рд░ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП composeReducers рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:

function composeReducers(...reducers) {
  return (state, action) => {
    if (reducers.length === 0) {
      return state
    }

    const last = reducers[reducers.length - 1]
    const rest = reducers.slice(0, -1)

    return rest.reduceRight((enhanced, reducer) => reducer(enhanced, action), last(state, action))
  }
}

рдЗрд╕ рддрд░рд╣, рдЙрддреНрдкрд╛рдж рд╕реВрдЪреА рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рд░рд┐рдбреНрдпреВрд╕рд░ рдпрд╣ рдмрди рдЬрд╛рддрд╛ рд╣реИ:

// reducers/products.js
const reducer = (state, { type, payload}) => {
  // хЕ╢ф╗ЦщА╗ш╛С
}

export default composeReducer(reducer, list('products/FETCH_SUCCESS'))
// reducers/users.js
const reducer = (state, { type, payload}) => {
  // хЕ╢ф╗ЦщА╗ш╛С
}

export default composeReducer(reducer, list('users/FETCH_SUCCESS'))

рд╕реВрдЪреА рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрдИ рд░реЗрдбреНрдпреВрд╕рд░ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдПрдХ рд╣реА рддрд░реНрдХ рд╣реИред

@yesmeck , рд░реЗрдбреНрдпреВрд╕рд░ рдмрдврд╝рд╛рдиреЗ рдХреА рднреВрдорд┐рдХрд╛ рдХреЛ рдкрд╣рд▓реЗ рдХрдо рдХрд░рдХреЗ рдЖрдВрдХрд╛ рдЧрдпрд╛ рд╣реИред

@sorrycc рдХреНрдпрд╛ рдЖрдк рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВ? рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ dispatch рддреБрд▓рдирд╛ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛?

@ рдЯрд┐рдВрдХрд░ 404 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рд╣рдЯрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рдореИрдВ рдЗрд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛:
app.model(require('../models/a'));
рдРрдк.рдореЙрдбрд▓ (рдЖрд╡рд╢реНрдпрдХрддрд╛ ('../рдореЙрдбрд▓/рдмреА'));

рдореИрдВ рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рдХрд╛ рднреА рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рд╕рдордп рдореЗрдВ рдХрдИ рдореЙрдбрд▓реЛрдВ рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИред рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрдИ рдореЙрдбрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм рдореБрдЭреЗ рдЙрди рд╕рднреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЖрдпрд╛рдд рдХрд░реЗрдВ), рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдХреЛ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдореЙрдбрд▓ рдХрд░реЗрдВ, рдЬреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рддрд░реАрдХрд╛ рд▓реЗрдЦрди рдХрд╛ рд╣реИ:

// modelsцШпф╕кцЦЗф╗╢хд╣я╝МцЬЙх╛ИхдЪmodel
import models from './models';

models.forEach((m)=>{
    app.model(m);
});

// models.js
const context = require.context('./', false, /\.js$/);
const keys = context.keys().filter(item => item !== './index.js');
const models = [];
for (let i = 0; i < keys.length; i++) {
  models.push(context(keys[i]));
}
export default models;

рдпрд╣ рдмрд╣реБрдд рдбреА.рд╡реА.рдП. рд╣реИред

рдореБрдЭреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдбреИрд╢рдмреЛрд░реНрдб рдореЗрдВ antd рдлреЙрд░реНрдо рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд┐рд▓рд╛ред рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрджреНрдз рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЕрдм рд╕рдВрднрд╡ рд╣реИ?

@codering рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВ, antd рдХреЗ рд╕рд╛рде рдореБрджреНрджреЛрдВ рдХреЛ https://github.com/ant-design/ant-design/issues рдкрд░ рдкреВрдЫрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

https://github.com/react-component/form/blob/master/README.md
рдиреЛрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИред

рд╣реИрд▓реЛ, рдореИрдВ рдЖрдкрдХреЗ рдбреАрд╡реАрдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдореИрдВ рд░рд┐рдПрдХреНрдЯ рд╡реЗрдмрдкреИрдХ рд░реЗрдбрдХреНрд╕ рдордЪрд╛рди рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдбреИрд╢рдмреЛрд░реНрдб рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЛрдб рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрдд рдХреЗ рдмрд╛рдж рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдХрд╣рд╛рдБ рд╣реИ? рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛, рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдкрддрд╛: https://github.com/baiyulong/lenovo_parts

@baiyulong рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдбреИрд╢рдмреЛрд░реНрдб рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕реЗ рд╕реАрдзреЗ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ?

@sorrycc рдореИрдВ рдЕрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдбреИрд╢рдмреЛрд░реНрдб рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХреНрдпрд╛ рдбреАрд╡реАрдП рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдЪрд╛рд░ рдпрд╛ рд▓реЗрдЦрди рд╣реИ?
export default function({ history }) {
return (
<Router history={history}>
<IndexRoute component={HomePage} />
<Route path='/' component={HomePage}>
<Route path='/create' component={CreateOrder} />
</Route>
</Router>
)
}
рдпрд╣ рдорд╛рд░реНрдЧ рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ, рд╣реЛрдордкреЗрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВрдиреЗ <Link to='/create'>Create</Link> рд▓рд┐рдВрдХ рд▓рд┐рдЦрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж CreateOrder рдШрдЯрдХ рдкрд░ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛

@baiyulong dva рдХрд╛ рдорд╛рд░реНрдЧ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдХреГрдкрдпрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

  1. рдХреНрдпрд╛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ
  2. рд╕реАрдзреЗ /create рдорд╛рд░реНрдЧ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

@nikogu рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдиреЗрд╕реНрдЯреЗрдб рдЖрдЙрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдареАрдХ рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛

рд╣реИрд▓реЛ, рдХреНрдпрд╛ рдбреАрд╡реАрдП рдореЙрдбрд▓ рдХреЗ рд╣реЙрдЯ рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

@kkkf1190 рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛ред

рдореИрдВ

рдмрд╕ рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред . .

рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛ рд╕реЛрдЪрд╛ рд╣реИ рдХрд┐ Vuejs рдХреЗ Vue-CLI рдХрд╛ рдордЪрд╛рди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдореЗрд░реА рд╕реЛрдЪ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓ рдЧрдИ рд╣реИред

рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рдлреНрд░реЗрдо! рдХреБрдЫ рд╕рдордп рд╕реЗ рд╢реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВред @sorrycc рдореИрдВ рдпреБрдВрдбрд╛ рд╕реЗ рджреЛ рдкреНрд░рд╢реНрди рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

  1. dva рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреЗрд╢реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
  2. рдХреНрдпрд╛ dva+reactjs рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

@ рдлреНрд░реАрдореЗрдореНрдмрд░007

  1. рд╕рдорд░реНрдерди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓, рд╕рдВрджрд░реНрдн рдЙрджрд╛рд╣рд░рдг: https://github.com/sorrycc/dva-example-react-native
  2. рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдкреАрдЫреЗ рд░реЗрдбрдХреНрд╕ рдФрд░ рд░рд┐рдПрдХреНрдЯ-рд░рд╛рдЙрдЯрд░ рджреЛрдиреЛрдВ рдПрд╕рдПрд╕рдЖрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдбреАрд╡реАрдП рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рддрд░реНрдХ рдХреЛ рд╕реАрдзрд╛ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

@sorrycc рдХреНрдпрд╛ рдЕрдм рдЙрдЪреНрдЪ рдСрд░реНрдбрд░ рд░реЗрдбреНрдпреВрд╕рд░ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ? рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрдЪреНрдЪ-рдХреНрд░рдо рд╡рд╛рд▓реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ

@ancheel рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд, рд╡реИрд╢реНрд╡рд┐рдХ рдпрд╛ рд╕реНрдерд╛рдиреАрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╕рдВрджрд░реНрдн рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛: https://github.com/dvajs/dva/blob/master/test/reducers-test.js

рдореЙрдбрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рдореЗрд╢рд╛ рд╣реЛрддреА рд╣реИ
antd.js:32924 рдЪреЗрддрд╛рд╡рдиреА: setState(...): рдореМрдЬреВрджрд╛ рд░рд╛рдЬреНрдп рд╕рдВрдХреНрд░рдордг рдХреЗ рджреМрд░рд╛рди рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ (рдЬреИрд╕реЗ render рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдШрдЯрдХ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рднреАрддрд░)ред рд░реЗрдВрдбрд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рдкреНрд░реЙрдкреНрд╕ рдФрд░ рд╕реНрдЯреЗрдЯ рдХрд╛ рд╢реБрджреНрдз рдХрд╛рд░реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП; рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рдПрдХ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ componentWillMount рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдмрд╣реБрдд рд╣реА рд░реЛрдорд╛рдВрдЪрдХ, рдЗрд╕реЗ рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЕрдиреБрдХреВрд▓рди рдФрд░ рд╕реБрдзрд╛рд░ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛

рдЗрд╕реЗ рдмреЗрд╡рдХреВрдлрд╝ рдмрдирд╛рдУ!

рдЕрдЪреНрдЫрд╛ рдХрд╛рдоуАВрдзрдиреНрдпрд╡рд╛рджя╝Бя╝Б

@sorrycc рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реИрдВ!

@mountainmoon рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд, https://github.com/sorrycc/dva-boilerplate-isomorphic рджреЗрдЦреЗрдВ ред

рдкрд╣рд┐рдпреЛрдВ рдХреА рдПрдХ рд▓рд╣рд░ рдЖрдИ: +1:

рдирдорд╕реНрддреЗ, рдореИрдВ рдЕрднреА рдЗрд╕ рдбреАрд╡рд╛ рдХреЛ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд░реНрдХ рдореЗрдВ рдЖрдпрд╛ рд╣реВрдВред рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореЗрд░реЗ рджрд┐рд▓ рдореЗрдВ рдХреБрдЫ рд╕рд╡рд╛рд▓ рд╣реИрдВред рдореИрдВ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЖрдкрдХреЗ рдбреЗрдореЛ рд╕рднреА рд╕рд┐рдВрдЧрд▓-рдкреЗрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рднреА рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдорд▓реНрдЯреА-рдкреЗрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИрдВред рдореИрдВ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рдорд▓реНрдЯреА-рдкреЗрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдореЗрдВ рд░реВрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдШрдЯрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдП, рд╢рд╛рдпрдж рдореИрдВ рд╣реВрдВ рдПрдХ рдмреЗрд╡рдХреВрдл рдкреВрдЫрдирд╛ред рдпрд╣ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд░реВрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛, рдЗрд╕рд▓рд┐рдП рдореЙрдбрд▓ рдореЗрдВ рд╕реЗрдЯ рд╢реНрд░реЛрддрд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд╣рд╛рдВ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реИ:
рдЗрддрд┐рд╣рд╛рд╕ред рд╕реБрдиреЛ (рд╕реНрдерд╛рди => {
рдЕрдЧрд░ (рд╕реНрдерд╛рди.рдкрдердирд╛рдо === '/ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛') {
рдкреНрд░реЗрд╖рдг({
рдЯрд╛рдЗрдк рдХрд░реЗрдВ: 'рдХреНрд╡реЗрд░реА рд╕рдХреНрд╕реЗрд╕',
рдкреЗрд▓реЛрдб:{}
})
}
})
рдкреБрдирд╢реНрдЪ: рдХреНрд╡реЗрд░реА рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рд╕рдлрд▓рддрд╛ рд╡рд┐рдзрд┐ рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдиреЗрдХреНрдЯ (mapStateToProps) (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП; рдПрдХ рддреНрд░реБрдЯрд┐ рднреА рдмрддрд╛рдИ рдЧрдИ рд╣реИ:
Connect.js:41 Uncaught TypeError: рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рдХреЛ рдлрдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛
рдореИрдВ рдПрдХ рдкрд▓ рдореЗрдВ рдПрдХ рдмреЗрд╡рдХреВрдл рдХреА рддрд░рд╣ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдзрдиреНрдпрд╡рд╛рдж!

рдбреАрд╡рд╛ рдХреНрдпреЛрдВ? рдХреГрдкрдпрд╛ рдЕрдВрдЧреНрд░реЗрдЬрд╝реА рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ

рдореБрдЭреЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдпрд╣ рддрд░реАрдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред

@codering рдЖрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдбреИрд╢рдмреЛрд░реНрдб рдореЗрдВ рдПрдПрдирдЯреА рдлреЙрд░реНрдо рдШрдЯрдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрджреНрдз рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЕрдм рд╕рдВрднрд╡ рд╣реИ?
рдореИрдВрдиреЗ рднреА рдЗрд╕рдХрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдПрдХ рд╢реБрджреНрдз рдлрд╝рдВрдХреНрд╢рди рдШрдЯрдХ рд╣реИ, рддреЛ getFieldDecorator рдлрд╝рдВрдХреНрд╢рди рдХреЛ props.form.getFieldDecorator рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпрд╛ рднрдЧрд╡рд╛рди рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ @sorrycc

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЙрд╕реА рдкреЗрдЬ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рд╣рдо рдЗрд╕реЗ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рд╣рдореЗрдВ dva рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред

рд╣реИрд▓реЛ, рдЕрдЧрд░ рдпрд╣ рдПрдХ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реЛрдЧреА, рдФрд░ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдмреЛрдЭрд┐рд▓ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдЗрд╕реЗ рдХрдИ рдореЙрдбрд▓реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

@ yazhou-zyz рдореБрдЭреЗ рдЖрдкрдХреЗ рдЬреИрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ:
рдЪреЗрддрд╛рд╡рдиреА: рд╕реЗрдЯрд╕реНрдЯреЗрдЯ (...): рдореМрдЬреВрджрд╛ рд░рд╛рдЬреНрдп рд╕рдВрдХреНрд░рдордг рдХреЗ рджреМрд░рд╛рди рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ (рдЬреИрд╕реЗ рдХрд┐ рд░реЗрдВрдбрд░ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдШрдЯрдХ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рднреАрддрд░)ред рд░реЗрдВрдбрд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рдкреНрд░реЙрдкреНрд╕ рдФрд░ рд╕реНрдЯреЗрдЯ рдХрд╛ рд╢реБрджреНрдз рдХрд╛рд░реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП; рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯреНрд╕ рдПрдХ рдПрдВрдЯреА-рдкреИрдЯрд░реНрди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдВрдкреЛрдиреЗрдВрдЯрд╡рд┐рд▓рдорд╛рдЙрдВрдЯ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛?

рд╕реАрдЦрдирд╛

рдкрдврд╛рдИ рдХрд░рддреЗ рд░рд╣реЛ

рдирд┐рд░реНрдорд╛рдг рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдбреАрд╡реАрдП рдорд╣рд╛рди рд╕рдВрджрд░реНрдн рдореВрд▓реНрдп рдХрд╛ рд╣реИред

рдЕрдЪреНрдЫрд╛ рдХрд╛рдо~

рдореБрдЭреЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдбреЙрдХреНрд╕ рдХрд╣рд╛рдВ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ ??? рдЕрдиреБрд╡рд╛рджрдХ рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рд╡рд┐рд╖рдп рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ рдФрд░ рд╕рдордЭ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реЗ рдЖрдк рд▓реЛрдЧ рджреБрдирд┐рдпрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддреЗ рд░рд╣реЗрдВ!! :рд░реЙрдХреЗрдЯ:

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ 0.47.X рдФрд░ React16.0.0 рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ dva рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ

@vecold рд╣рдореЗрд╢рд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдХрд┐ рдЖрдордВрддреНрд░рдг рдХреЛрдб рдпрд╛ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдХреНрдпрд╛ рдХреЛрдИ рдореМрдХрд╛ рд╣реИ рдХрд┐ рд╣рдо рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХрд╛ рдЕрдВрдЧреНрд░реЗрдЬреА рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВ?
рдзрдиреНрдпрд╡рд╛рдж!

рд╡реНрдпрд╛рдкрд╛рд░ рдХреЛрдб рдореЗрдВ, рдРрд╕рд╛ рдЙрджрд╛рд╣рд░рдг рдЖрдо рд╣реИред рдПрдХ рд╕реНрдерд╛рдиреАрдп рд░рд╛рдЬреНрдп рдЕрджреНрдпрддрди рдкреВрд░реЗ рд╢рд░реАрд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХрдИ рд╕реНрдерд╛рди рдЬрд┐рдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рднреА рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреГрд╖реНрда рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрд╣реБрдд рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ mapStateToProps рдЧрдгрдирд╛рдУрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП redux рдХрдиреЗрдХреНрдЯ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ

рдЖрдк рдмрд╣реБрдд рдЕ
рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдПрдХ рдкреЗрдЬ рдмрдирд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рд╕рднреА рдкреЗрдЬ рдмрдирд╛рддрд╛ рд╣реИ

_рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдЕрдиреБрд╡рд╛рдж_

рдбреАрд╡рд╛ рдХреНрдпреЛрдВ?

рд░реЗрдбрдХреНрд╕ рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд╛рд░реА рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд╣реИрдВ, рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд░реЗрдбреНрдпреВрд╕рд░, рд╕рд╛рдЧрд╛ рдФрд░ рдХреНрд░рд┐рдпрд╛рдПрдВ (рд╡рд┐рднрд┐рдиреНрди рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд)

  1. рд░реЗрдбреНрдпреВрд╕рд░, рд╕рдВрддреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдмрд╛рд░-рдмрд╛рд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
  2. рд╡реНрдпрд╡рд╕рд╛рдп рдореЙрдбрд▓ (рдпрд╛ рдбреЛрдореЗрди рдореЙрдбрд▓) рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕реБрд╡рд┐рдзрд╛ред рдХреНрд╕реНрдк рдХреЗ рд▓рд┐рдП, рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА user_list рд╣реИ, рдФрд░ product_list рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдПрдХ рдлрд╛рдЗрд▓ рдХреЙрдкреА рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
  3. рд╕рд╛рдЧрд╛ рд▓рд┐рдЦрдирд╛ рдХрдард┐рди рд╣реИред рдЖрдкрдХреЛ рд╣рд░ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рдВрдЯрд╛ -> рджреНрд░рд╖реНрдЯрд╛ -> рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред
  4. рдкреНрд░рд╡реЗрд╢ рдердХрд╛рдК рдФрд░ рдЬрдЯрд┐рд▓ рд╣реИ

рдбреАрд╡рд╛ рдХреНрдпрд╛ рд╣реИ?

рдпрд╣ рдореМрдЬреВрджрд╛ рдврд╛рдВрдЪреЗ рдкрд░ рдПрдХ рд▓рд╛рдЗрдЯ рд░реИрдкрд░ рд╣реИ (рд░реЗрдбрдХреНрд╕ + рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ + рд░реЗрдбрдХреНрд╕-рд╕рд╛рдЧрд╛ ...) рдХреЛрдИ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред <100 рд▓рд╛рдЗрди рдХреЛрдбред (рдПрд▓реНрдо рдФрд░ рдЪреВ рд╕реЗ рдкреНрд░реЗрд░рд┐рддред)

рдпрд╣ рдПрдХ рдврд╛рдВрдЪрд╛ рд╣реИ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВред Ember.js рдХреА рддрд░рд╣, рдпрд╣ рдЖрдкрдХреЗ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЯреАрдо рд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдгреАрдп рд╣реИред рдбреАрд╡рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреЛрдо рдХреЛ рд╕рд╣рдХрд░реНрдореА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ

рдЗрд╕рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрдерд╛рд╕рдВрднрд╡ рдХрдо рдирдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдХреНрд╕реНрдк рдХреЗ рд▓рд┐рдП, рд░рд╛рдЙрдЯрд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╣реИ рдЬреИрд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рдХрд╛ JSXред

рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ app.model рд╣реИред рдпрд╣ рд░реЗрдбреНрдпреВрд╕рд░, рдЗрдирд┐рд╢рд┐рдпрд▓рд╕реНрдЯреЗрдЯ, рдПрдХреНрд╢рди, рдЧрд╛рдерд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИред

app.model({
  namespace: 'products',
  state: {
    list: [],
    loading: false,
  },
  subscriptions: [
    function(dispatch) {
      dispatch({type: 'products/query'});
    },
  ],
  effects: {
    ['products/query']: function*() {
      yield call(delay(800));
      yield put({
        type: 'products/query/success',
        payload: ['ant-tool', 'roof'],
      });
    },
  },
  reducers: {
    ['products/query'](state) {
      return { ...state, loading: true, };
    },
    ['products/query/success'](state, { payload }) {
      return { ...state, loading: false, list: payload };
    },
  },
});

рд╣рдо sagas/products.js, reducers/products.js actions/products.js рдмрдирд╛рддреЗ рдереЗ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рдереЗред

рдореБрдЦреНрдп рдмрд┐рдВрджреБ:

  • рдиреЗрдорд╕реНрдкреЗрд╕: key рдХрд╛ reducer рдЕрдкрдиреЗ rootReducer рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ
  • рд░рд╛рдЬреНрдп: initialState рдХрд╛ reducer
  • рд╕рджрд╕реНрдпрддрд╛: [email protected] рдХреА рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛, рдбреЛрдо рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд: FRP рдХреЛ рдПрдХ рд╡рд┐рджрд╛рдИ
  • рдкреНрд░рднрд╛рд╡: рдЖрд╕рд╛рди рдЛрд╖рд┐
  • рдХрдо рдХрд░рдиреЗ рд╡рд╛рд▓реА

рдХреИрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗ

рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ

рд░реЛрдбрдореИрдк

  • devtool рд╣реЙрдЯ-рд░реАрд▓реЛрдб
  • рд░рд╛рдЙрдЯрд░ рдХреЗ рд▓рд┐рдП рдбрд╛рдпрдирд╛рдорд┐рдХ рдХреЙрдиреНрдлрд┐рдЧрд░
  • Effects рдЕрдзрд┐рдХ saga рдореЙрдбрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ
  • рдЕрдзреНрдпрд╛рдп рдкрд░реАрдХреНрд╖рд╛
  • рдЕрдзрд┐рдХ рдЙрджрд╛рд╣рд░рдг: todolist, antd-init рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рд▓реЛрдХрдкреНрд░рд┐рдп рдЙрддреНрдкрд╛рдж

рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╢реНрди

рджреЗрд╡-рдЙрдкрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ?

Redux-devtool, css livereload рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддред рд╣реЙрдЯ-рд░реАрд▓реЛрдб рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдЙрддреНрдкрд╛рдж env рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ?

рдЬрд╝рд░реВрд░

Redux + redux-saga рдХреА рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛?

рд╣рд╛рдВ

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрдЧрддрддрд╛?

Redux-saga рдХреЗ рдХрд╛рд░рдг IE8 рдирд╣реАрдВред (рдмрд╛рдж рдореЗрдВ рдкреНрд░рднрд╛рд╡ рдкрд░рдд рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдердВрдХ, рд╡рд╛рджрд╛, рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рд▓рд╛рдЧреВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)

рдХреГрдкрдпрд╛ рд╕рдорд╛рди

['products/query']: function*() {}
['products/query'](state) {}

рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдореЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

@clemTheDasher рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХреА рдЧрдгрдирд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреБрдВрдЬреА (рд╕рд░рдгреА рдирд╣реАрдВ ) рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рд╡рд┐рдзрд┐ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рд╕рдВрджрд░реНрдн |

var obj = {
  property( parametersтАж ) {},
  *generator( parametersтАж ) {},
  async property( parametersтАж ) {},
  async* generator( parametersтАж ) {},

  // with computed keys:
  [property]( parametersтАж ) {},
  *[generator]( parametersтАж ) {},
  async [property]( parametersтАж ) {},

  // compare getter/setter syntax:
  get property() {},
  set property(value) {}
};

рдирд╡рд╛рдЧрдВрддреБрдХ рд░рд┐рдкреЛрд░реНрдЯ, рдпрд╣рд╛рдВ рдЖрдПрдВ рдФрд░ рдлреНрд░рдВрдЯ-рдПрдВрдб рдЬреНрдЮрд╛рди рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВ

@clemTheDasher рдпрд╣ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рд╣реИред

рд▓рд┐рдВрдХ https://github.com/dvajs/dva/tree/master/examples/count 404 рдХреНрдпреЛрдВ рд╣реИ?

рд╕реАрдЦрдирд╛!

рднрдЧрд╡рд╛рди рдХреА рдУрд░ рджреЗрдЦреЛ

рднрдЧрд╡рд╛рди рдХрд╛ рд╢реБрдХреНрд░ рд╣реИ, рдУрдкрди рд╕реЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

рдХреНрдпрд╛ рдореБрдЭреЗ рдЖрдк рд▓реЛрдЧреЛрдВ рд╕реЗ рд╕реАрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ!

рдореИрдВрдиреЗ рд╕реАрдЦрд╛, рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдврд╛рдВрдЪрд╛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

рдЬреАрдердм рдкрд░ рдбреЗрдореЛ рд▓рд┐рдВрдХ рдХреА рд╕рдордп рд╕реАрдорд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИред

@sorrycc рдХреНрдпрд╛ dva рдЕрдм рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ?

рдХреНрдпрд╛ рд░реЗрдбреНрдпреВрд╕рд░ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

const reducer = (state, { type, payload }) => {
  switch (type) {
    case 'products/query':
      return { ...state, loading: true, };
    case 'products/query/success':
      return { ...state, loading: false, list: payload };
    default
      return state;
  }
}

app.model({
  reducer
})

рдЗрд╕рд╕реЗ рд░реЗрдбреНрдпреВрд╕рд░ рдореЗрдВ рдХреБрдЫ рдЙрдЪреНрдЪ-рдХреНрд░рдо рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рд▓реЗрдЦрди рдХреА Redux рд╢реИрд▓реА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ, рдФрд░ рд░рд╛рдЬреНрдп рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдЪреАрдиреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЛрдб рдХреА рдХрдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдПрдХ рд╕рд╛рде рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рд╢реЗрд╖ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдЧрд▓реЗ рдкрдбрд╝рд╛рд╡ рддрдХ рдкрд╣реБрдВрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП ...state рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рд╕реНрдерд┐рддрд┐ рдЕрдзреВрд░реА рд░рд╣ рдЬрд╛рдПрдЧреАред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХрдо рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди, рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдкрд░ рдХреБрдЫ рд░рд╛рдЬреНрдп рдЦреЛ рд╕рдХрддреЗ рд╣реИрдВред

рдХреБрдЫ рдорд╛рдпрдиреЛрдВ рдореЗрдВ, Vuex рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдФрд░ рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИред рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦреЗрдВ (рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ)ред

const mutation = {
  ['products/query'](state) {
    state.loading = true
  },
  ['products/query/success'](state, payload) {
    state.loading = false
    state.list = payload
  }
}

рдХреЛрдб-рд╡рд╛рд░, рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рдХреА рдкрд░рд╡рд╛рд╣ рд╣реИ рдХрд┐ рдореИрдВ рдХрд┐рд╕ рд░рд╛рдЬреНрдп рдХреЛ (рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ) рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рд╕реНрдЯреЗрдЯ рдиреЗрдХреНрд╕реНрдЯ-рд╕реНрдЯреЙрдк рдбрд┐рд▓реАрд╡рд░реА рдХреЗ рд▓рд┐рдП Vuex рдХреЛ рдмрд╛рд╣рд░ рдХреА рддрд░рдл рдПрдХ рдкрд░рдд рднреА рд▓рдкреЗрдЯрдиреА рдЪрд╛рд╣рд┐рдПред рд╕рдВрднрд╡рдд: рдбрд┐рд▓реАрд╡рд░реА рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рд░рдХреНрд╖рд╛рддреНрдордХ рдЬрд╛рдВрдЪ (рдЕрдиреБрдорд╛рди) рднреА рдХреА рдЬрд╛рддреА рд╣реИ, рдпрд╛ рд╣реБрдХ рд▓рдЧрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдореБрдЭрд╕реЗ рдкреВрдЫреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдбреАрд╡реАрдП рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдкреГрд╖реНрда рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЖ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЕрдкрдЧреНрд░реЗрдб рд╣реИ?

рдХреГрдкрдпрд╛ рд╕рдорд╛рди

['products/query']: function*() {}
['products/query'](state) {}

рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдореЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

ES6 рд╢рд╛рдмреНрджрд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, (рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐) рд╡рд╕реНрддреБ рдХреЗ рдЧреБрдг рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЕрд░реНрдерд╛рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдореЗрдВ рд░рдЦреЗрдВред
рдЬреИрд╕реЗ рдХрд┐

obj = {
  ['xxname']: 'what ever you defined',
  ['xxyy'](args) {
    ....
  }
}

рдПрдХ рд╕рд╡рд╛рд▓ рд╣реИ, 'рдЙрддреНрдкрд╛рдж/рдХреНрд╡реЗрд░реА' рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реЗрдбреНрдпреВрд╕рд░ рдХреА рдХреЙрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрдорд╕реНрдкреЗрд╕ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ, рдпрджрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдбрд╝реА рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЬреИрд╕реЗ рд╕реИрдХрдбрд╝реЛрдВ рд╡рд┐рдзрд┐рдпрд╛рдВред рдЕрдЧрд░ рдореЗрд░рд╛ рдирд╛рдорд╕реНрдерд╛рди рдмрджрд▓рдирд╛ рд╣реИред рд╕реМ рддрд░реАрдХреЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП?

@yesmeck , рд░реЗрдбреНрдпреВрд╕рд░ рдмрдврд╝рд╛рдиреЗ рдХреА рднреВрдорд┐рдХрд╛ рдХреЛ рдкрд╣рд▓реЗ рдХрдо рдХрд░рдХреЗ рдЖрдВрдХрд╛ рдЧрдпрд╛ рд╣реИред

рдкрддрд╛ рдирд╣реАрдВ рдпрд╣рд╛рдБ рд╕рдорд░реНрдерди рд╣реИ рдпрд╛ рдирд╣реАрдВ?

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

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

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

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

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

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

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