рдХреЛрдИ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рднреА рдкреБрд░рд╛рдиреЗ рд╣реИрдВред
рдбреАрд╡рд╛ рдХреНрдпреЛрдВ?
рд╕реНрд╡-рдЕрдзреНрдпрдпрди рдпрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреА рдЕрд╡рдзрд┐ рдХреЗ рдмрд╛рдж, рд╕рднреА рдХреЛ рд░реЗрдбрдХреНрд╕ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдФрд░ рдпрд╣ рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдгреАрдп рдФрд░ рддрд░реНрдХ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдорддреМрд░ рдкрд░ рдРрд╕рд╛ рд╕рд╡рд╛рд▓ рд╣реЛрддрд╛ рд╣реИ: рдмрд╣реБрдд рд╕рд╛рд░реА рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд╣реИрдВ, рдФрд░ рд░реЗрдбреНрдпреВрд╕рд░, рдЧрд╛рдерд╛ рдФрд░ рдПрдХреНрд╢рди рд╕рднреА рдЕрд▓рдЧ рд╣реЛ рдЧрдП рд╣реИрдВ (рдЙрдк-рдлрд╛рдЗрд▓реЗрдВ)ред
рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ:
рдФрд░ рдХреБрдЫ рдЕрдиреНрдп:
рдФрд░ рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 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 рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ)
рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗрдВ:
devtool
рд╣реЙрдЯ рд╕реНрд╡реИрдк рд╕рдкреЛрд░реНрдЯрд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рд╕реНрддрд░ рдХрд╛ рд╕рдорд░реНрдерди?
рдЧрд░реНрдо рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрд┐рд╕реЗ рдЕрднреА рддрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдиреНрдп рдЬреИрд╕реЗ рдХрд┐ redux-devtool, css livereload, рдЖрджрд┐ рд╕рднреА рд╕рдВрдЧрдд рд╣реИрдВред
рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд┐рд▓реНрдб рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ?
рдХрд░ рд╕рдХрдирд╛ред
рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдкрд┐рдЫрд▓реЗ рд░реЗрдбрдХреНрд╕ + рд░реЗрдбрдХреНрд╕-рд╕рд╛рдЧрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ?
рд╣рд╛рдВред
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрдЧрддрддрд╛?
IE8 рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рдХреНрдпреЛрдВрдХрд┐ redux-saga рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред (рд╣рдо рдмрд╛рдж рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рднрд╛рд╡ рдкрд░рдд рдореЗрдВ рдердВрдХреНрд╕, рд╡рд╛рджреЛрдВ, рд╡реЗрдзрд╢рд╛рд▓рд╛рдУрдВ рдЖрджрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ)
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 рдХрд╛ рдорд╛рд░реНрдЧ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдХреГрдкрдпрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
@nikogu рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдиреЗрд╕реНрдЯреЗрдб рдЖрдЙрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдареАрдХ рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛
рд╣реИрд▓реЛ, рдХреНрдпрд╛ рдбреАрд╡реАрдП рдореЙрдбрд▓ рдХреЗ рд╣реЙрдЯ рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
@kkkf1190 рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛ред
рдореИрдВ
рдмрд╕ рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред . .
рдореИрдВрдиреЗ рд╣рдореЗрд╢рд╛ рд╕реЛрдЪрд╛ рд╣реИ рдХрд┐ Vuejs рдХреЗ Vue-CLI рдХрд╛ рдордЪрд╛рди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдореЗрд░реА рд╕реЛрдЪ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓ рдЧрдИ рд╣реИред
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рдлреНрд░реЗрдо! рдХреБрдЫ рд╕рдордп рд╕реЗ рд╢реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВред @sorrycc рдореИрдВ рдпреБрдВрдбрд╛ рд╕реЗ рджреЛ рдкреНрд░рд╢реНрди рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
@ рдлреНрд░реАрдореЗрдореНрдмрд░007
@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 рдХрдиреЗрдХреНрдЯ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ
рдЖрдк рдмрд╣реБрдд рдЕ
рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдПрдХ рдкреЗрдЬ рдмрдирд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рд╕рднреА рдкреЗрдЬ рдмрдирд╛рддрд╛ рд╣реИ
_рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдЕрдиреБрд╡рд╛рдж_
рд░реЗрдбрдХреНрд╕ рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд╛рд░реА рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд╣реИрдВ, рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд░реЗрдбреНрдпреВрд╕рд░, рд╕рд╛рдЧрд╛ рдФрд░ рдХреНрд░рд┐рдпрд╛рдПрдВ (рд╡рд┐рднрд┐рдиреНрди рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд)
рдпрд╣ рдореМрдЬреВрджрд╛ рдврд╛рдВрдЪреЗ рдкрд░ рдПрдХ рд▓рд╛рдЗрдЯ рд░реИрдкрд░ рд╣реИ (рд░реЗрдбрдХреНрд╕ + рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ + рд░реЗрдбрдХреНрд╕-рд╕рд╛рдЧрд╛ ...) рдХреЛрдИ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред <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
рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ
devtool
рд╣реЙрдЯ-рд░реАрд▓реЛрдбEffects
рдЕрдзрд┐рдХ saga
рдореЙрдбрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИрджреЗрд╡-рдЙрдкрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ?
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 , рд░реЗрдбреНрдпреВрд╕рд░ рдмрдврд╝рд╛рдиреЗ рдХреА рднреВрдорд┐рдХрд╛ рдХреЛ рдкрд╣рд▓реЗ рдХрдо рдХрд░рдХреЗ рдЖрдВрдХрд╛ рдЧрдпрд╛ рд╣реИред
рдкрддрд╛ рдирд╣реАрдВ рдпрд╣рд╛рдБ рд╕рдорд░реНрдерди рд╣реИ рдпрд╛ рдирд╣реАрдВ?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
redux рджреНрд╡рд╛рд░рд╛ рдЬреАрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдХреЗрд╡рд▓ рд╕реБрд╕рдорд╛рдЪрд╛рд░ рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реИред рдмрд╣реБрдд рдкреНрд░рд╢рдВрд╕рд╛! ! !
рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдореИрдВрдиреЗ рдЧрд▓рддреА рд╕реЗ рдПрдХ рд╡рд┐рджреЗрд╢реА рдХреЛ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдЖрдЬ рдЗрд╕реЗ рджреЛрдмрд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛, рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рджреЗрд╢реА рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереА рдХрд┐ рдпрд╣ Alipay рдХрд╛ рд╕рд╣рдкрд╛рдареА рд╣реЛрдЧрд╛,