рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдиреБрднрд╡ рдореЗрдВ рд╕реБрдзрд╛рд░

рд╡рд┐рднрд┐рдиреНрди рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдмреЛрд▓рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реА рдЯреАрдореЗрдВ NgRx рдХреЛ рдкрд╕рдВрдж рдХрд░рддреА рд╣реИрдВред рд╣рдорд╛рд░реА рдЪрд░реНрдЪрд╛ рдХреЗ рджреМрд░рд╛рди, рд╡рд┐рдЪрд╛рд░ рдиреЗ рдореБрдЭреЗ рдирд╣реАрдВ рдЫреЛрдбрд╝рд╛:
"рдХрдо рдХреЛрдб рдмрдирд╛рдП рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдФрд░ рдмрд╛рдж рдореЗрдВ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрди рдЧрд╛рдЗрдб рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ ред "
рдЗрд╕рдиреЗ рдореБрдЭреЗ рд╡рд┐рднрд┐рдиреНрди Redux рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рддрдХрдиреАрдХреЛрдВ рдХреА рдЦреЛрдЬ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдПрдХ рд╡реАрдбрд┐рдпреЛ рджреЗрдЦрд╛, Redux рд▓реЗрдЦ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрдврд╝реЗред рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ NgRx рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрд╛ рдЬрд┐рд╕реЗ NgRx Ducks рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
рд▓рдХреНрд╖реНрдпреЛрдВ
рдореВрд▓рддрдГ, ngrx-ducks рдХреЛ NgRx рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ ред
- рдбреЗрдХреЛрд░реЗрдЯрд░ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рд░рд▓реАрдХреГрдд рдХрд╛рд░реНрд░рд╡рд╛рдИ, рдЬреЛ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ Reducer рдФрд░ рдПрдХреНрд╢рди рдирд┐рд░реНрдорд╛рддрд╛ рджреЛрдиреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред NgRx рдбрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдФрд░ рд░рд┐рдбреНрдпреВрд╕рд░ рдлреАрдЪрд░реНрд╕ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ ред
- рдХрдо рддрдХрдиреАрдХреА рд╕рд╣рд╛рдпрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдПрдирдо рдпрд╛ рдпреВрдирд┐рдпрди рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
- рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдПрдХ рд╕рд╣рдЬ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдПрдХ рдЗрдВрдЬреЗрдХреНрд╢рди рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░ рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА NgRx рдкрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдФрд░ рд░рд┐рдбреНрдпреВрд╕рд░ рдлреАрдЪрд░ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдПрдХ рд╕реЗрд╡рд╛ рдорд┐рд▓рддреА рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реЗрд╡рд╛ рдПрдХ рдХрдбрд╝рд╛рдИ рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рдПрдкреАрдЖрдИ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ рдЬреЛ рднрдВрдбрд╛рд░рдг рд╕реЗ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдФрд░ рдбреЗрдЯрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
NgRx рдбрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореМрдЬреВрджрд╛ NgRx рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рднрдВрдбрд╛рд░ рдФрд░ рдкреНрд░реЗрд╖рдг рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ NgRx рдбрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░реЗрд╖рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдПрдХ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, NgRx рдбрдХ NgRx рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд░рд╣рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдВред
рд╕реНрдерд╛рдкрдирд╛
NgRx рдбрдХ рдПрдХ рдореМрдЬреВрджрд╛ NgRx рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдореВрд▓ рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред рдмрд╕ npm рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЖрдк рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред
npm install @co-it/ngrx-ducks
рдбреЗрдХреЛрд░реЗрдЯрд░ рдПрдкреАрдЖрдИ
рдПрдирдЬреАрдЖрд░рдПрдХреНрд╕ рдбрдХ рдХрд╛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдПрдХреНрд╢рди рдЯрд╛рдЗрдк рдФрд░ рдореНрдпреВрдЯреЗрдЯрд░ рд▓реЙрдЬрд┐рдХ ( рдЬрд┐рд╕реЗ рд░реЗрдбреНрдпреВрд╕рд░ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ) рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, @Ducksify рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд░реНрдЧ рдХреЛ рдПрдиреЛрдЯреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред
import { Ducksify } from '@co-it/ngrx-ducks'; @Ducksify<number>({ initialState: 0 }) export class Counter {}
рдбреЗрдХреЛрд░реЗрдЯрд░ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЗ рд╢реБрд░реБрдЖрддреА рд╕реНрдЯреЗрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрд░рдВрднрд┐рдХ рдорд╛рд░реНрдЧ рдЧреБрдЬрд░рдиреЗ рд╕реЗ NgRx рдбрдХрд╕ рдмрд╛рдж рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ reducer рдлрд╝рдВрдХреНрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЕрдм рдЖрдк рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рддрд░реНрдХ рдХреЛ рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдВрджрд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрд╡рд┐рдЪ-рдХреЗрд╕ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдПрдХреНрд╢рди рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╢рди рдЯрд╛рдЗрдк рдФрд░ рдореНрдпреВрдЯреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдХреЗ рдмреАрдЪ рдПрдХ рдореИрдкрд┐рдВрдЧ рдмрдирд╛рддреЗ рд╣реИрдВред
import { Action, Ducksify } from '@co-it/ngrx-ducks'; @Ducksify<number>({ }) export class Counter { @Action('[Counter] Increase by passed value') increaseBy(state: number, payload: number): number { return state + payload; } }
NgRx рдбрдХ рд╣рд░ рдПрдХреНрд╢рди рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдореНрдпреВрдЯреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдХреЗ рд╕рд╛рде рдореИрдк рдХрд░рддрд╛ рд╣реИред рдмрддрдЦ рдореЗрдВ reducer рдлрд╝рдВрдХреНрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред
Reducer рдлрд╝рдВрдХреНрд╢рди
Reducer рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ NgRx рдбрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред ReducerFrom рдлреИрдХреНрдЯреНрд░реА рдкреНрд░рддреНрдпреЗрдХ рдПрдХреНрд╢рди рдЯрд╛рдЗрдк рдХреЛ рдЙрд╕рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдореНрдпреВрдЯреЗрд╢рди рд▓реЙрдЬрд┐рдХ рдореЗрдВ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реБрдХрдЕрдк рдЯреЗрдмрд▓ рдмрдирд╛рддреА рд╣реИред
import { reducerFrom, DucksifiedAction, ... } from '@co-it/ngrx-ducks'; export function reducer( state: number, action: DucksifiedAction): number { return reducerFrom(Counter)(state, action); }
рдПрдУрдЯреА рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрднреА рднреА рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ reducerFrom рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЙрддреНрдкрдиреНрди reducer рдХреЛ NgRx рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ActionReducerMap рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ( рдиреАрдЪреЗ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ )ред
рдмрддрдЦ рд╢рдХреНрддрд┐!
рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЕрднреА рддрдХ рдЖрдирд╛ рдмрд╛рдХреА рд╣реИ! рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП NgRx рдбрдХ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╣реИред Reducer рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреАрдврд╝реА рдХреЗ рд╕рд╛рде, рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрдЗрдП рдЧрддрд┐рд╢реАрд▓ рдореБрдЦреМрдЯрд╛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, рдЬреЛ рдпрд╣рд╛рдВ рднреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
@Ducksify рдбреЗрдХреЛрд░реЗрдЯрд░ рднреА рдЕрдкрдиреЗ рдмрддрдЦ рдХреЛ рдХреЛрдгреАрдп IoC рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдШрдЯрдХ рдореЗрдВ рдмрддрдЦ рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!
рд╡реЙрд▓реНрдЯ рдПрдХреНрд╢рди рдбрд┐рд╕реНрдкреИрдЪрд┐рдВрдЧ
NgRx рдбрдХ рдбрдХ рдореЗрдВ рдХреБрдЫ рд╕реБрдзрд╛рд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬрдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рд░рд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рд╣реБрдЖ рдПрдкреАрдЖрдИ рдорд┐рд▓рддрд╛ рд╣реИред
import { Duck } from '@co-it/ngrx-ducks'; @Component({ }) export class CounterComponent { constructor(@Inject(Counter) private _counter: Duck<Counter>) { this.counter.incrementBy(42); } }
рдЖрдк рдбрдХ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ , рдХрд╛рдЙрдВрдЯрд░ рд╣реА рдирд╣реАрдВред рдбрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрдВрдХреНрд░реАрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдкрд╛рд░рд┐рдд рдореВрд▓реНрдп (рдкреЗрд▓реЛрдб) рдХреЗ рд╕рд╛рде рдПрдХреНрд╢рди рднреЗрдЬрддрд╛ рд╣реИред рдбрд╛рдпрдирд╛рдорд┐рдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдк рддреБрд░рдВрдд IDE рдореЗрдВ рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, NgRx рдбрдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдк рдбрдХ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдЖрдк рдмрд╕ рдЯрд╛рдЗрдкреНрдб, рдбрд╛рдпрдирд╛рдорд┐рдХ рдореБрдЦреМрдЯрд╛, рдЙрддреНрдкрдиреНрди рдФрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рд╣реЛрддреЗ рд╣реИрдВред
рд╕рдВрдЧреНрд░рд╣рдг рд╕реЗ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐
рдбрдХ рд╕реНрдЯреЛрд░реЗрдЬ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП NgRx рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдмрддрдЦ рдореЗрдВ рдПрдХ рд╕рд╣рд╛рдпрдХ рдкрд┐рдХ рд╣реИ рдЬреЛ рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХрд╛рдЙрдВрдЯрд░ рдХреБрдВрдЬреА " рдХрд╛рдЙрдВрдЯрд░ " рдХреЗ рд╕рд╛рде рдПрдХ NgRx рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрдпрдирдХрд░реНрддрд╛ рд╕реЗрдЯрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
import { createFeatureSelector, createSelector} from '@ngrx/store'; const visitCounter = createFeatureSelector<number>('counter'); const count = createFeatureSelector<number>(count => count); @Component({ }) export class CounterComponent { count$: Observable<number>;constructor(@Inject(Counter) private _counter: Duck<Counter>) { this.count$ = this.counter.pick(count); this.counter.incrementBy(42); } }
рдЖрдк stackblitz.io рдкрд░ рдбреЗрдореЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдмрддреНрддрдЦ рджреЛрдиреЛрдВ рд░рд╛рдЬреНрдп рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдЯреНрд░рд┐рдЧрд░ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдбреЗрдЯрд╛ рдХреНрд╡реЗрд░реА рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ "рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ" рд╕реЗрд╡рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рднрдВрдбрд╛рд░рдг рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдПрдкреАрдЖрдИ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреА рд╣реИред
рдФрд░ рдЕрдВрдд рдореЗрдВ
NgRx рдмрддрдЦ рднреА рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде рдореВрд▓ рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ! рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╣реА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред
рдпрджрд┐ рдЖрдк рдЕрднреА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реИрдВ, рддреЛ рдЖрдк рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрдЯреИрдХрдмреНрд▓рд┐рдЯреНрдЬрд╝.рдЖрдИрдУ рдкрд░ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ ред
рдЯреАрдПрд▓, рдбреЙ
- NgRx рдмрддрдЦ NgRx рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
- рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ NgRx рдбрдХ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рдмрддрдЦрд╝
.... рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░реНрд╕ рдФрд░ рд░рд┐рдбреНрдпреВрд╕рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ
ред ... рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреНрд░рдЧрдгрдХреЛрдВ рдФрд░ рд╕рдВрдШ рдкреНрд░рдХрд╛рд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдмрдирд╛рддрд╛ рд╣реИ
.... рдпрд╣ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкрд╣рд▓реВ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рдШрдЯрдХ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
... рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╕реНрд╡-рдкреНрд░реЗрд╖рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ; рдХреНрд╖рдорд╛ рдХреНрд░рд┐рдпрд╛
.... рдкрд┐рдХ-рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдЧреНрд░рд╣рдг рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
ред ... рдкреНрд░рднрд╛рд╡ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рджреЗрдЦреЗрдВред рдбреЗрдореЛ )
рд╡рд╣ рд╕рдм рд▓реЛрдЧ рд╣реИрдВ!
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХреЛ NgRx рдмрддрдЦ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рддреЛ рдмрд╕ GitHub рдкрд░ рд▓рд┐рдЦреЗрдВ