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

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдХ рд╡рд░реНрдЧ рдШрдЯрдХ рдФрд░ setState рд╡рд┐рдзрд┐ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд░рд╛рдЬреНрдп рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШрдЯрдХреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрдЯреЛрд░ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдлрд┐рд░ рднреА, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдореБрджрд╛рдп рдХреЗ рдмреАрдЪ, рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдФрд░ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдлреНрд▓рдХреНрд╕, рд░рд┐рдбрдХреНрд╕, рд░рд┐рдбрдХреНрд╕-рдПрдЯрд┐рдпрдиреНрд╕, рдЗрдлрд╝реЗрдХреНрдЯрд░, рдореЛрдмрд╛рдЗрд▓, рд╕реЗрд░реЗрдмреНрд░рд▓, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдЧреБрдЪреНрдЫрд╛)ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХреЗрд╡рд▓ рд╕реЗрдЯрд╕реНрдЯреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рдФрд░ рдЬрдЯрд┐рд▓ рдбреЗрдЯрд╛ рд╕рдВрдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╕рдВрднрд╡ рд╣реИ? рдХреНрдпрд╛ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЪрд▓рд┐рдП рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВред
рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реЗрдЯрд╕реНрдЯреИрдЯ рд╣реИ рдФрд░ рдЬреЛ рд░рд╛рдЬреНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдШрдЯрдХ рдХреЗ рд░реЗрдВрдбрд░ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдХрдИ рдШрдЯрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬреЛ рдкрд░рд╕реНрдкрд░ рдЬреБрдбрд╝реЗ рд╣реБрдП рди рд╣реЛрдВ? рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЧреЛрджреА рдореЗрдВ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде "рдЙрдард╛рдиреЗ рд░рд╛рдЬреНрдп" рдПрдХ рдЦрдВрдб рд╣реИ - рд╣рдо рдмрд╕ рд░рд╛рдЬреНрдп рдХреЛ рдЗрди рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рдкреНрд░реЙрдкрд░ (рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдордзреНрдпрд╡рд░реНрддреА рдШрдЯрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдбреЗрдЯрд╛ рдФрд░ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред рдЫреЛрдЯреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдЯрд┐рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдкреВрд░реНрд╡рдЬреЛрдВ рдХреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдШрдЯрдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рд╡реГрддреНрддрд┐ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИ рдХрд┐ рдкреВрд░рд╛ рд░рд╛рдЬреНрдп рдЙрдЪреНрдЪ рдФрд░ рдЙрдЪреНрдЪрддрд░ рд╣реЛрдЧрд╛ рдФрд░ рдРрдк рдХреЗ рдореВрд▓ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХред рдирддреАрдЬрддрди, рд╕реЗрдЯрд╕реНрдЯреИрдЯ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдШрдЯрдХ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдпрд╛ рдРрдк рдХреЗ рд░реВрдЯ рдШрдЯрдХ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рддрд░реНрдХ рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛрдВрдЧреЗред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╕реЗрдЯрд╕реНрдЯреИрдЯ рдпрд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдФрд░ рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рдШрдЯрдХ рд╕реЗ рдЗрд╕ рдбреЗрдЯрд╛ рддрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ?
рд╕рдмрд╕реЗ рдЖрдо рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╕реНрддреБрдУрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирд┐рдпрдо рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпрд╣ рд╕реАрдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЗрдХрд╛рдИ рдкреНрд░рдХрд╛рд░реЛрдВ рдФрд░ рдЙрдирдХреЗ рд╕рдВрдмрдВрдзреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рд╡рд┐рдШрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ рдЬреЛ рдкреВрд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд░ рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ - (рдпрд╣ рд╕реНрдЯрд╛рдЗрд▓, рд╕реНрдерд╛рдиреАрдпрдХрд░рдг, рдЦрд┐рдбрд╝рдХреА рдХреЗ рдЖрдХрд╛рд░ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕) рдПрдХ рдПрдХрд▓ AppState рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдмрд╕ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред
// src/stores/AppState.js export const AppState = { locale: "en", theme: "...", .... }
рдЕрдм рдХрд┐рд╕реА рднреА рдШрдЯрдХ рдореЗрдВ рдЖрдк рд╣рдорд╛рд░реЗ рд╕реНрдЯреЛрд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдЖрдпрд╛рдд рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
import AppState from "../stores/AppState.js" const SomeComponent = ()=> ( <div> {AppState.locale === "..." ? ... : ...} </div> )
рд╣рдо рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ - рд▓рдЧрднрдЧ рд╣рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╕рд╛рд░ рд╣реЛрддрд╛ рд╣реИ (рдпрд╣ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рд╕рд░реНрд╡рд░ рд╕реЗ рдЖрддрд╛ рд╣реИ, рдЖрджрд┐), рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕рд┐рдВрдЧрд▓рдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЛрдЧреАред рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рднреА рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдпрд╛рдд рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЗрд╕реЗ AppState рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рддреБрд░рдВрдд рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЕрдм рдореБрдЦреНрдп рдмрд╛рдд - рдЖрдкрдХреЛ рдЖрд╡реЗрджрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдЖрд░реЗрдЦ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдпреЗ рдПрдХ-рд╕реЗ-рдХрдИ рдпрд╛ рдХрдИ-рд╕реЗ-рдХрдИ рд░рд┐рд╢реНрддреЛрдВ рдХреЗ рд╕рд╛рде рддрд╛рд▓рдореЗрд▓ рд╣реЛрдВрдЧреЗ, рдФрд░ рд░рд┐рд╢реНрддреЛрдВ рдХреА рдпрд╣ рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдореБрдЦреНрдп рд╕рд╛рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдареАрдХ рд╣реИ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╡рд╕реНрддреБ рдХреЗрд╡рд▓ рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕-рд╕рдВрд╕реНрдерд╛рдУрдВ-рд╕реНрдЯреЛрд░реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдЧреА, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ-рд╕реНрдЯреЛрд░, рдмрджрд▓реЗ рдореЗрдВ, рдЕрдиреНрдп рдПрдВрдЯрд┐рдЯреА-рд╕реНрдЯреЛрд░реЛрдВ рдХреЗ рдПрд░реЗрдЬ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдЧрд╛ред
рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ - рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╣реИ рдЬрд┐рд╕реЗ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдЯреИрдм рдХрд╛рд░реНрдп рдореЗрдВ рдлрд╝реЛрд▓реНрдбрд░, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛ / рд╕рдВрдкрд╛рджрд┐рдд / рд╣рдЯрд╛ рд╕рдХрддрд╛ рд╣реИ" (рдпрд╣ рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрдХ рдХреА рддрд░рд╣ рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ) рдФрд░ рд░рд╛рдЬреНрдп рдХреЗ рдЖрд░реЗрдЦ рдореЗрдВ рджрд┐рдЦреЗрдЧрд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
export const AppStore = { locale: "en", theme: "...", currentUser: { name: "...", email: "" folders: [ { name: "folder1", projects: [ { name: "project1", tasks: [ { text: "task1", subtasks: [ {text: "subtask1"}, .... ] }, .... ] }, ..... ] }, ..... ] } }
рдЕрдм App рдХрд╛ рд░реВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпреВрдЬрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдпрд╣ рдпреВрдЬрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдбреИрд╢рдмреЛрд░реНрдб рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
.... <Dashboard user={appState.user}/> ....
рдФрд░ рд╡рд╣ рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдХреА рд╕реВрдЪреА рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ
... <div>{user.folders.map(folder=><Folder folder={folder}/>)}</div> ...
рдФрд░ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛
.... <div>{folder.projects.map(project=><Project project={project}/>)}</div> ....
рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
.... <div>{project.tasks.map(task=><Task task={task}/>)}</div> ....
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЯрд╛рд╕реНрдХ рдХрдВрдкреЛрдиреЗрдВрдЯ рд╡рд╛рдВрдЫрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдмрд╕реНрдХреИрд╕ рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдХреЗ рд╕рдмрд╕реНрдЯреЙрдХ рдХреА рд╕реВрдЪреА рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ
.... <div>{task.subtask.map(subtask=><Subtask subtask={subtask}/>)}</div> ....
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рдкреГрд╖реНрда рдкрд░ рдХреЛрдИ рднреА рд╕рднреА рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреА рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдЗрдб рдкреИрдирд▓ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА), рдкреЗрдЬреЛрдВ рдЖрджрд┐ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИ - рдорд╛рддрд╛-рдкрд┐рддрд╛ рдШрдЯрдХ рдПрдореНрдмреЗрдбреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд╕рд╛рде рдЧреБрдЬрд╛рд░рддреЗ рд╣реИрдВред рдбреЗрдЯрд╛ред рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝реЛрд▓реНрдбрд░, рдкрд░рд┐рдпреЛрдЬрдирд╛, рдХрд╛рд░реНрдп рдХрд╛ рдПрдХ рд╡рд╕реНрддреБ) рдХрд┐рд╕реА рднреА рдШрдЯрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдШрдЯрдХ рдмрд╕ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╕реНрддреБ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣рд╛рд░рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдШрдЯрдХ рдЯрд╛рд╕реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯ ( <div>{project.tasks.map(task=><Task task={task}/>)}</div>
) рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рдЬрдорд╛ рд╣реЛрддреЗ рд╣реИрдВ рдЖрдк рдЗрд╕ рдХрд╛рд░реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдореЗрд╢рд╛ рдмрд╛рд╣рд░ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, AppState.currentUser.folders [2] .projects [3] .tasks [4] .text = "рд╕рдВрдкрд╛рджрд┐рдд рдХрд╛рд░реНрдп" рдФрд░ рдлрд┐рд░ рд░реВрдЯ рдШрдЯрдХ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг (ReactDOM.render (<App />)ред ) рдФрд░ рдЗрд╕ рддрд░рд╣ рд╣рдо рдЖрд╡реЗрджрди рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдЧреЗ рд╣рдо рдЯрд╛рд╕реНрдХ рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ "+" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдирдпрд╛ рд╕рдмрдЯреИрдХ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ
onClick = ()=>{ this.props.task.subtasks.push({text: ""}); updateDOM() }
рдЪреВрдВрдХрд┐ рдЯрд╛рд╕реНрдХ рдШрдЯрдХ рдХрд╛рд░реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрд╕рдХреЗ рд░рд╛рдЬреНрдп рдХреЗ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реИрд╢реНрд╡рд┐рдХ AppState рд╕реНрдЯреЛрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд, рдХрд╛рд░реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХрд╛рд░реНрдп рд╕рд░рдгреА рдХреЗ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдмрджрд▓реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА AppState рдХреЗ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИред ) рдФрд░ рдЗрд╕ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЙрдк-рдХрд╛рд░реНрдп рд╕рд░рдгреА рдореЗрдВ рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд░реВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдЕрдкрдбреЗрдЯ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕рднреА рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдШрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╡реЗ рдХрд╣рд╛рдВ рд╣реБрдП) рдмрд╕ рдПрдкреАрдкреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ ateDOM, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рд░реВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИред
export function updateDOM(){ ReactDom.render(<App/>, rootElement); }
рдФрд░ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ рдХрд┐ AppState рдХреЗ рдХрд┐рди рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рдФрд░ рдХрд┐рди рдЬрдЧрд╣реЛрдВ рд╕реЗ рд╣рдо рдмрджрд▓рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдмрдЯреИрдХ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рд╕реИрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдирд╛рдо рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (this.props.folder.name = "рдирдпрд╛ рдирд╛рдо) ") - рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдШрдЯрдХ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рд░реВрдЯ рдШрдЯрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рд╕рднреА рдиреЗрд╕реНрдЯреЗрдб рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рдВрдкреВрд░реНрдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдм рдЪрд▓реЛ рдкрдХреНрд╖ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдк рдиреЛрдЯрд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдИ рдЗрдХрд╛рдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП project.tasks.push({text: "", subtasks: [], ...})
рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдЧреБрдг рд╣реИрдВ, рддреЛ рд╣рд░ рдмрд╛рд░ рдЙрдиреНрд╣реЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЖрдк рдПрдХ рдЧрд▓рддреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдорди рдореЗрдВ рдЖрддреА рд╣реИ рд╡рд╣ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдбрд╛рд▓рддреА рд╣реИ рдЬрд╣рд╛рдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝реАрд▓реНрдб рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдирдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред
function createTask(data){ return { text: "", subtasks: [], ... //many default fields ...data } }
рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рджреВрд╕рд░реА рддрд░рдл рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЗрдХрд╛рдИ рдХрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдХреНрд╖рд╛рдПрдВ рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рд╣реИрдВ
class Task { text: ""; subtasks: []; constructor(data){ Object.assign(this, data) } }
рдФрд░ рдлрд┐рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рд╕реЗ рдмрд╕ рдХреБрдЫ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрди рдЬрд╛рдПрдЧрд╛
onAddTask = ()=>{ this.props.project.tasks.push(new Task({...}) }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реА рддрд░рд╣, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ, рд╕рдмрд╕реНрдХреВрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рджреЛрд╣рд░рд╛рд╡ рдорд┐рд▓рддрд╛ рд╣реИред
constructor()
рд▓реЗрдХрд┐рди рд╣рдо рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдХреЛрдб рдХреЛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред
class BaseStore { constructor(data){ Object.update(this, data); } }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рдХрд┐рд╕реА рд░рд╛рдЬреНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВ
user.firstName = "..."; user.lastName = "..."; updateDOM();
рдФрд░ рдпрд╣ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реМрджреЗрдмрд╛рдЬреА рдХрд░рдирд╛ рдФрд░ рд╕рдордЭрдирд╛ рдХрд┐ рдШрдЯрдХ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЪреИрдирд▓ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ рд╣рдо рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рдЕрдиреНрдп рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рдзрд╛рди рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдЕрдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рдирдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЗрдЧрд╛ рдФрд░ рдЦреБрдж рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧрд╛ рдФрд░ рдирд┐рдпрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗрд╡рд▓ рдЕрдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпрдХреНрд╖ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ
class Task { update(newData){ console.log("before update", this); Object.assign(this, data); console.log("after update", this); } }
рдЦреИрд░, рдкреНрд░рддреНрдпреЗрдХ рдХрдХреНрд╖рд╛ рдореЗрдВ рдХреЛрдб рдХреА рдирдХрд▓ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рдЕрдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдЕрдм рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рд╣рдо рдХреБрдЫ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдЕрдкрдбреЗрдЯрдбреЙрдо () рд╡рд┐рдзрд┐ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдХреЙрд▓ рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рдкрд░ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреА рдЕрдкрдбреЗрдЯ ({...}) рд╡рд┐рдзрд┐ рд╕реЗ рдХреЙрд▓ рдЖрдПред
рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛
class BaseStore { constructor(data){ Object.update(this, data); } update(data){ Object.update(this, data); ReactDOM.render(<App/>, rootElement) } }
рдареАрдХ рд╣реИ, рддрд╛рдХрд┐ рдЕрдкрдбреЗрдЯ рдХреА рдХреНрд░рдорд┐рдХ рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди () рд╡рд┐рдзрд┐ рдХреЛрдИ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЕрдкрдбреЗрдЯ рди рд╣реЛ, рдЖрдк рдШрдЯрдХ рдХреЛ рдЕрдЧрд▓реЗ рдИрд╡реЗрдВрдЯ рд▓реВрдк рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рджреЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
let TimerId = 0; class BaseStore { constructor(data){ Object.update(this, data); } update(data){ Object.update(this, data); if(TimerId === 0) { TimerId = setTimeout(()=>{ TimerId = 0; ReactDOM.render(<App/>, rootElement); }) } } }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдзреАрд░реЗ-рдзреАрд░реЗ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рд░ рдмрд╛рд░ рд╕рд░реНрд╡рд░ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдиреБрд░реЛрдз рди рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд░рд╛рдЬреНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рдЕрдкрдбреЗрдЯ ({..}) рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдШрдЯрдХреЛрдВ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдФрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрд╢реНрд╡рд┐рдХ рд╣реИрд╢ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдХрд╛ рдПрдХ рдЦрд╛рддрд╛ рдЬреЛрдбрд╝рдХрд░ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд╛рдЗрд╡ рдЕрдкрдбреЗрдЯ рдЪреИрдирд▓ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрднреА рднреА рдмрд╣реБрдд рдХреБрдЫ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╖рдп рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдмрд╣реБрдд рдмрд╛рд░ рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдШрдЯрдХ рдПрдХ рдХрд╛рд░реНрдп рдШрдЯрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ -
<div>{project.tasks.map(task=><Task task={task}/>)}</div>
рдХрд╛рд░реНрдп рдХреЗ рдмрд╣реБрдд рдШрдЯрдХ рдХреЛ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рд╕реАрдзреЗ рдХрд╛рд░реНрдп рдХреЗ рдЕрдВрджрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓ рд╡рд╕реНрддреБ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рд░рдВрдЧ рдореЗрдВ рд░рдВрдЧрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ рдФрд░ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯрд╛рд╕реНрдХ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░реЙрдкреНрд╕ <Task task={task} project={this.props.project}/>
рдХреЛ рднреА рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рдЕрдЪрд╛рдирдХ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд░рдВрдЧ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░рдВрдЧ рдореЗрдВ рд░рдВрдЧрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдШрдЯрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрддрдорд╛рди рдлрд╝реЛрд▓реНрдбрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлрд╝реЛрд▓реНрдбрд░ рдШрдЯрдХ рд╕реЗ рдЯрд╛рд╕реНрдХ рдШрдЯрдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдПрдХ рдирд╛рдЬреБрдХ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ рдХрд┐ рдШрдЯрдХ рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрд╕рдХреЗ рдиреЗрд╕реНрдЯреЗрдб рдШрдЯрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрджрд░реНрдн рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдордзреНрдпрд╡рд░реНрддреА рдШрдЯрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЛ рд╕рд░рд▓ рдХрд░реЗрдЧрд╛, рдЕрднреА рднреА рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдФрд░ рдмрдЪреНрдЪреЗ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХрд┐рд╕реА рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдХрд┐рд╕реА рдЧреНрд░рд╛рд╣рдХ рдХреА рдЗрдЪреНрдЫрд╛ рд╕реВрдЪреА рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рдХрд┐рд╕реА рдШрдЯрдХ рдХреЛ рдирдИ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЙрдЪреНрдЪрддрд░ рдШрдЯрдХреЛрдВ рдХреЛ рдпрд╛ рддреЛ рдкреНрд░реЙрдкрд░ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рддрд╛ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдШрдЯрдХ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рд░рд╛рдЬреНрдп рдХреЗ рдХрд┐рд╕реА рднреА рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдВ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рдЕрдЪреНрдЫрд╛ рдлрд┐рдЯ рд╣реИ (рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рдЬреИрд╕реЗ рдПрд▓реНрдо рдпрд╛ рд░реЗрдбреНрдпреВрдХреНрд╕ рдЬреИрд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг) - рддрд╛рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдкрд░рд┐рдкрддреНрд░ рд▓рд┐рдВрдХ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХреЗрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЯрд╛рд╕реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреИрд░реЗрдВрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╕рдВрдЧреНрд░рд╣рд┐рдд рд╣реИ, рдФрд░ рдмрджрд▓реЗ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд░реВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрджрд┐, AppState рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд░реВрдЯ рдХрд░реЗрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдШрдЯрдХ, рдЪрд╛рд╣реЗ рд╡рд╣ рдХрд┐рддрдирд╛ рднреА рдЧрд╣рд░рд╛ рд╣реЛ, рд╣рдореЗрд╢рд╛ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореВрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдордзреНрдпрд╡рд░реНрддреА рдШрдЯрдХреЛрдВ рдХреЗ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЗрдВрдХрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рдирд┐рдпрдо рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ - рд╣рд░ рдмрд╛рд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдореВрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдм рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдп рдмрдирд╛рдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛
... const {project} = this.props; const newTask = new Task({project: this.props.project}) this.props.project.tasks.push(newTask);
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмреЛрд▓реНрдЯрд▓рд┐рдВрдХ рдмреИрдХрд▓рд┐рдВрдХ рд╕рдкреЛрд░реНрдЯ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреИрд░реЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛, рдЬрдм рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдлрд╝реЛрд▓реНрдбрд░ = newFolder рд╕рдВрдкрддреНрддрд┐ рдФрд░ рд╣рдЯрд╛рдирд╛ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкрд┐рдЫрд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрд░реЗ рд╕реЗ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрд░реЗ рдореЗрдВ рдПрдХ рдирдпрд╛ рдлреЛрд▓реНрдбрд░ рдЬреЛрдбрд╝рдиреЗ) рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рднреА рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЬрдм рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рддреЛ рдпрд╣ рдкреЗрд░реЗрдВрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ - new Task({project: this.porps.project})
new Task({project: this.porps.project})
рдФрд░ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдЕрдкрдиреЗ рдЖрдк project.tasks
рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рдХрд╛рд░реНрдп рд╕рд░рдгреА рдФрд░ рдпрд╣ рднреА рдХрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХрд╛рд░реНрдп рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдЕрджреНрдпрддрди task.update({project: newProject})
рдлрд╝реАрд▓реНрдб рдФрд░ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ред рдкрд┐рдЫрд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдФрд░ рдПрдХ рдирдП рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рд┐рд╢реНрддреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдерд┐рд░ рдЧреБрдгреЛрдВ рдпрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ) рддрд╛рдХрд┐ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЛ рдкрддрд╛ рд╣реЛ рдХрд┐ рдХрд┐рди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдирд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ, рдХреЗрд╡рд▓ рдЬреЗрдПрд╕-рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪреЗ рдХрд┐ рдЖрдк рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рднреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдмрд┐рдирд╛ рдЖрд╡реЗрджрди рдореЗрдВ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ред
рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдлрд┐рд░, рд╣рдореЗрдВ рд░рд╛рдЬреНрдп рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореЛрдмрд╛рдЗрд▓ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░рд╛рдЬреНрдп рдХреЗ рд╕рдВрдЧрдарди рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рджреЗрд╢реА "рд╡реЗрдирд┐рд▓рд╛" рдЬреЗрдПрд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (рдпрд╛ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдмрдбрд╝реА рдЦрд╛рдореА рд╣реИ - рдЬрдм рд░рд╛рдЬреНрдп рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдлрд╝реАрд▓реНрдб рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрд╛ "рд░реЗрдВрдбрд░" рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝реЗ рдирд╣реАрдВ рд╣реИрдВред рдФрд░ рд░рд╛рдЬреНрдп рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИрдВред
рдФрд░ рдмреЛрд▓реНрдб рдпреВрдЖрдИ рдХреЗ рд╕рд╛рде рдмрдбрд╝реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░, рдпрд╣ рдмреНрд░реЗрдХ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрд╛рд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреВрд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдЖрднрд╛рд╕реА рдШрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдВрдбрд░рд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрд┐рд▓реНрдХреБрд▓ рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдирдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реА рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╕реНрдпрд╛, рдорд╣рддреНрд╡ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рддрдХрдиреАрдХреА рд╣реИ - рдЗрд╕рдореЗрдВ рдЗрди рд╡рд┐рдЯреНрд░рд┐рдпрд▓ рдбреЛрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рдорд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬреЛ рд░реЗрдВрдбрд░рд░ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдШрдЯрдХ рд╕реАрдорд╛ рдХреЛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдирдпрд╛ рдЖрднрд╛рд╕реА рд╣реЛрдо рдЯреНрд░реА рдмрдирд╛рдиреЗ рдФрд░ рдкрд┐рдЫрд▓реЗ рдкреЗрдбрд╝ рдХреЗ рд╕рд╛рде рдмрд╛рдж рдореЗрдВ рдкреБрдирд░рд╛рд╡рд░реНрддреА рддреБрд▓рдирд╛ рдкрд╛рд╕ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдШрд░ рдирд╡реАрдХрд░рдг рддрдХрдиреАрдХреЗрдВ рд╣реИрдВред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬреЛ рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдЕрджреНрдпрддрди рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ - рдЕрд░реНрдерд╛рддреН, рдпрд╣ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд░рд╛рдЬреНрдп рдХреЗ рдХреМрди рд╕реЗ рд╣рд┐рд╕реНрд╕реЗ рдХрд┐рди рдШрдЯрдХреЛрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдбреЗрдЯрд╛ рдмрджрд▓рддреЗ рд╕рдордп, рдХреЗрд╡рд▓ рдЙрди рдШрдЯрдХреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдЬреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╢реЗрд╖ рдШрдЯрдХреЛрдВ рдХреЛ рд╕реНрдкрд░реНрд╢ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред Redux рднреА рдПрдХ рдРрд╕рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреНрдп рд╕рдВрдЧрдарди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, mobx рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдХреБрдЫ рдирдпрд╛ рдирд╣реАрдВ рд▓рд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЖрд╡реЗрджрди рдореЗрдВ рдХреБрдЫ рднреА рдмрджрд▓реЗ рдмрд┐рдирд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд░реЗрдВрдбрд░рд░ рдХрд╛ рддреНрд╡рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдмрд╕ рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ @observable
рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ рдЬреЛрдбрд╝реЗрдВ рдФрд░ @observable
рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЛ рдЗрди рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХреЛрдВ рдкрд░ @observable
рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ рд╣рдорд╛рд░реЗ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рдЕрдкрдбреЗрдЯ () рдкрджреНрдзрддрд┐ рдореЗрдВ рд░реВрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЕрдкрдбреЗрдЯ рдХреЛрдб рдХреЛ рдХрд╛рдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╣рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдорд┐рд▓реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдм рд░рд╛рдЬреНрдп рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдХреЗрд╡рд▓ рдЙрди рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдкрд░рд┐рдкрдХреНрд╡ рдЬреЛ рд╡рд╕реНрддреБ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░рд╛рдЬреНрдп рдХреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП (рдЕрдВрджрд░ рд╡рд┐рдзрд┐ () рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдореЛрдбрд╝)ред