VueJS рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд░рд╛рдЬреНрдп рдорд╢реАрди



рдореИрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдкреВрд░реНрдг рд╕реНрдЯреИрдХ рд░реЗрдбрд┐рдпреЛ рдкрд░ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЪрд░реНрдЪрд╛ рдореЗрдВ рдЖрдпрд╛ - рд╕реНрдЯреЗрдЯ рдорд╢реАрдиреЛрдВ рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рдпреВрдЖрдИ рдШрдЯрдХ ред рдореБрджреНрджрд╛ рдпрд╣ рдерд╛ рдХрд┐ рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ Vue рдШрдЯрдХреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИред рдореИрдВрдиреЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╡реЗ рдЗрддрдиреЗ рд╕рд░рд▓ рдирд╣реАрдВ рдереЗ, рдФрд░ рдореИрдВ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрд╣ рд▓реЗрдЦ рди рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ Vue рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ Angular, React, рдЖрджрд┐ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдиреНрдп "рд╕рдВрдкреНрд░рджрд╛рдпреЛрдВ" рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЪрд░реНрдЪрд╛ рдиреЗ рдЙрди рд╕рднреА рд╡рд┐рд╖рдпреЛрдВ рдХреЗ рдХрд░реАрдм рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдШрдЯрдХреЛрдВ рдХреЛ рд▓рд┐рдЦрд╛ рдерд╛ред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдПред рдЖрдк рдПрдХ рдШрдЯрдХ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдХреНрд╡реЗрд░реА рдЪрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рд╕реНрдкрд┐рдирд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдк рдПрдХ рдмреВрд▓рд┐рдпрди рд╡реИрд░рд┐рдПрдмрд▓ isLading рдмрдирд╛рддреЗ рд╣реИрдВред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, isLoading = false, рдФрд░ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк isLading рдЪрд░ рдХреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рдбреЗрдЯрд╛ рдЖрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдиреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рд╕реНрдкрд┐рдирд░ рд╡рд┐рдЬрд┐рдмрд┐рд▓рд┐рдЯреА рдХреЛ isLading рд╕реЗ рдмрд╛рдВрдзрд╛ рдЧрдпрд╛ рд╣реИред

рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдорд╣рд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдШрдЯрдХ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЗрддрдирд╛ рд╕рд░рд▓ рд╣реИред рдФрд░ рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди, рд╡рд┐рднрд┐рдиреНрди рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд╛рд░реНрдХрд┐рдХ рдЪрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд░рд╛рдЬреНрдп рдЪрд░ рд╣реИ, рддреЛ рдпрд╣ рджреЛ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреЛ рддрд╛рд░реНрдХрд┐рдХ рдЪрд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд╛рд░ рд░рд╛рдЬреНрдп рд╣реИрдВ, рддреАрди - рдЖрда, рдЖрджрд┐ред рдФрд░ рдкрд░реЗрд╢рд╛рдиреА рдпрд╣ рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдПрдХ рдЧрд▓рддреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рд░рд╛рдЬреНрдп рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдШрдЯрдХ рдХреЛ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдФрд░ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

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

рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдХрд╛рдлреА рдХреБрдЫ рд▓реЗрдЦ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Vue рдореЗрдВ Finite State Machines , рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢, рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдмрд╛рдж, рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, davidkpiano / xstate ред

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

рдпрд╣рд╛рдБ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ - Vue рдХреЗ рд╕рд╛рде рд░рд╛рдЬреНрдп рдорд╢реАрди, рд╕рдВрд╕реНрдХрд░рдг 2 ред рдФрд░ рдпрд╣рд╛рдВ рдХрдЪреНрдЪрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде - рд░рд╛рдЬреНрдп рдорд╢реАрди Vue рдХреЗ рд╕рд╛рде, рд╕рдВрд╕реНрдХрд░рдг 1 ред
рдореИрдВрдиреЗ рд╕реНрдЯреЗрдЯ рдорд╢реАрди рд╕реЗ рд▓реЗрдЦ рд╢реБрд░реВ рдХрд┐рдпрд╛ред

рддреЛ рд░рд╛рдЬреНрдп рдорд╢реАрди:

class StateMachine { constructor (initialState, transitions) { this.state = initialState this.transitions = transitions } transition (nextState, method, params) { const transitionsArray = this.transitions[this.state] if(transitionsArray.indexOf(nextState) === -1) return this.state if(method) method(...params) this.state = nextState return this.state } } 

рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ:

 const machine = new StateMachine('idle', { idle: ['waitingConfirmation'], waitingConfirmation: ['idle','waitingData'], waitingData: ['dataReady', 'dataProblem'], dataReady: ['waitingConfirmation'], dataProblem: ['waitingConfirmation'] }) 

рдШрдЯрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ, рд╕рдВрдХреНрд░рдордг рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдБ:

 transition(nextState, method = null, params = []) { this.machineState = machine.transition(nextState, method, params) } 

рдШрдЯрдирд╛рдУрдВ рдореЗрдВ, рд╣рдо рддреБрд░рдВрдд рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд╣рд╛рдБ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

 @click=тАЬtransition('waitingConfirmation')" 

рдпрджрд┐ рдЖрдкрдХреЛ рдЙрд╕реА рд╕рдордп рдШрдЯрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд▓рд┐рдЦреЗрдВ:

 @click="transition('waitingData', getData, [222])тАЭ 

рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдШрдЯрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕ рд╕рдВрдХреНрд░рдордг рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рддреАрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЪрд░ рдХрд╛ рдПрдХ рд╕рд░рдгреА рд╣реИред

рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрдВрджрд░, рдХреЙрд▓ рд╣реИ:

 this.transition('dataReady') 

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

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рд╣рдо рдШрдЯрдХ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рдореИрдВ рд╕реНрд╡рдпрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рддреИрдпрд╛рд░ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡реА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рд╕реЗ рд╕рд▓рд╛рд╣ рд╕реБрдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

Source: https://habr.com/ru/post/hi482250/


All Articles