рд░рд┐рдПрдХреНрдЯ-рд░рд┐рдбрдХреНрд╕ рдПрдХ рдмреЗрд╣рддрд░реАрди рдЪреАрдЬ рд╣реИред рдЬрдм рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреБрд╢рд▓ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдирд┐рд░реНрдгрдп рдХреЗ рд░реВрдк рдореЗрдВ, рдХреБрдЫ рдЦрд╝рд╛рд╕рд┐рдпрддреЗрдВ рд╣реИрдВред
рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд░рд┐рдбреНрдпреВрд╕рд░ рдХрд╛ рд╡рд┐рд╡рд░рдг рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдХреЛрдб рдореЗрдВ рдЗрди рджреЛ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рдХреНрд▓рд╛рд╕рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдп рд╣реИред
рдХреНрд▓рд╛рд╕рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рджрд░реНрдж
рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг:
рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ 3 рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдФрд░ рдХрдо рд╕реЗ рдХрдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:
- "рдмреНрд▓реЛрдЯ" рдХреЛрдб рдХреЛ рдХреЗрд╡рд▓ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдПрдХ рдирдИ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬреЛрдбрд╝рдХрд░
- рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдпрд╛рдд
- рдХрд╛рд░реНрд░рд╡рд╛рдИ рд▓рдЧрд╛рддрд╛рд░ рдирд╛рдо (рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ) рдкрдврд╝рдирд╛
рдЕрдиреБрдХреВрд▓рди
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ
redux-actions рдХреЗ рд╕рд╛рде рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
import { createActions, handleActions, combineActions } from 'redux-actions' export const actions = createActions({ popups: { open: { start: () => ({ loading: true }), pending: () => ({ loading: true }), fail: (error) => ({ loading: false, error }), success: (name, data) => ({ loading: false, name, data }), }, close: { start: () => ({ loading: true }), pending: () => ({ loading: true }), fail: (error) => ({ loading: false, error }), success: (name) => ({ loading: false, name }), }, }, }).popups const initialState = { opened: [] }; export const accountsReducer = handleActions({ [ combineActions( actions.open.start, actions.open.pending, actions.open.success, actions.open.fail, actions.close.start, actions.close.pending, actions.close.success, actions.close.fail ) ]: (state, { payload: { loading } }) => ({ ...state, loading }), [combineActions(actions.open.fail, actions.close.fail)]: (state, { payload: { error } }) => ({ ...state, error }), [actions.open.success]: (state, { payload: { name, data } }) => ({ ...state, error: null, opened: [ ...(state.opened || []).filter(x => x.name !== name), { name, data } ] }), [actions.close.success]: (state, { payload: { name } }) => ({ ...state, error: null, opened: [ ...state.opened.filter(x => x.name !== name) ] }) }, initialState)
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдкреВрд░реНрдгрддрд╛ рдХреА рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИред
рджрд░реНрдж рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░реЗрдВ
рдПрдХ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ, рдореИрдВ
LestaD habr.com/en/post/350850/#comment_10706454 рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдкрд╛рд░ рдЖрдпрд╛ рдФрд░
Redux -symbiote рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
рдЗрд╕рдиреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред
рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреЗ рд▓рдЧрд╛:
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореМрдЬреВрдж рдкреЗрд╢реЗрд╡рд░реЛрдВ рд╕реЗ:- рд╕рднреА рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ
- рдХрдо рдХреЛрдб
- рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╕рдВрд░рдЪрд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡
Minuses рдХреА:- рдЖрдИрдбреАрдИ рд╣рдореЗрд╢рд╛ рд╕рдВрдХреЗрдд рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
- рдХреЛрдб рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрд╢реНрдХрд┐рд▓ рд╣реИ
- рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ
рд╡рд┐рдкрдХреНрд╖ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрд╣ рдореЙрдбреНрдпреВрд▓ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдЪреНрдЫреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП
LestaD рдХреЛ рдзрдиреНрдпрд╡рд╛рджред