Vue рдореЗрдВ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐


рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдврд╛рдВрдЪреЗ, Vue.js рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛, рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ред рдФрд░ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВрдиреЗ рдЕрднреА рддрдХ Vue рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рд╣реИред рдореИрдВ рдпрд╣ рдХрд╣рдХрд░ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рд╕рд╣реА рдХреЛрдб рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЪреАрдЬреЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реА рд╣реЛрддреА рд╣реИрдВред рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ Vue рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдкрдиреА рдЦреЛрдЬреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рджреГрд╢реНрдп рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ!

рддреНрд░реБрдЯрд┐рдпреЛрдВ


рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ (рдХрдо рд╕реЗ рдХрдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЕрдЪреВрдХ рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдерд╛:

<div id="app" v-cloak> Hello, {{name}} </div> 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА [Vue рдЪреЗрддрд╛рд╡рдиреА] рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред



рдпрд╣рд╛рдБ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:


рджреВрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдЪрд░ рдХреЛ рдПрдХ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдмрд╛рдБрдзрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗ:

 <div id="app" v-cloak> Hello, {{name2}} </div> 

 const app = new Vue({ el:'#app', computed:{ name2() { return x; } } }) 

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, [Vue рдЪреЗрддрд╛рд╡рдиреА] рдЪреЗрддрд╛рд╡рдиреА рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЛрдиреЛрдВ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреБрдЫ рднреА рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЪрд▓рддрд╛ рд╣реИ:


рддреАрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрдиреА рдЪрд╛рд╣рд┐рдПред

 <div id="app" v-cloak> <button @click="doIt">Do It</button> </div> 

 const app = new Vue({ el:'#app', methods:{ doIt() { return x; } } }) 

рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣, рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рджреЛ рдмрд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдФрд░ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ред рд▓реЗрдХрд┐рди, рдЙрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗрд╡рд▓ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдмрдЯрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдФрд░ рдпрд╣рд╛рдБ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдореЛ рд╣реИ:


рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЬрд╛рд░реА рд░рдЦреЗрдВ, рдореИрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпреЗ рдЙрджрд╛рд╣рд░рдг рдЙрди рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпреЗ рдХреЗрд╡рд▓ рдХреБрдЫ рдореБрдЦреНрдп рд╣реИрдВ, рдЬреЛ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЕрдХреНрд╕рд░ Vue.js. рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рддреЛ, рдЖрдк рдХреИрд╕реЗ Vue рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореИрдВ рдереЛрдбрд╝рд╛ рд╣реИрд░рд╛рди рдерд╛ рдХрд┐ рд╡реАрдпреВ рдврд╛рдВрдЪреЗ рдХреЗ рдореБрдЦреНрдп рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдкрд░ рдХреЛрдИ рдЦрдВрдб рдирд╣реАрдВ рд╣реИред



рд╣рд╛рдВ, рдореИрдиреБрдЕрд▓ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдЕрдиреБрднрд╛рдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдкреВрд░рд╛ рдЕрд░реНрде рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджреНрдзрд░рдг рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ:

"рдпрджрд┐ рдШрдЯрдХ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рдВрдХреНрд╢рди Vue.config.errorHandler рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрджрд┐ рдХреЛрдИ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рдВрднрд╡рдд: рдЗрд╕ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐ рдмрдЧ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕реЗрд╡рд╛ рдЬреИрд╕реЗ рд╕реЗрдВрдЯреНрд░реА рдХреЗ рд╕рд╛рде, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреНрдпреЛрдВрдХрд┐ V8 рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдПрдХреАрдХрд░рдг рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИред "

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕реЗ рдкреВрд░рдХ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, Vue рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдзрди рд╣реИрдВ:

  • errorHandler;
  • warnHandler;
  • renderError;
  • errorCaptured;
  • window.onerror (рдпрд╣ рдЙрдкрдХрд░рдг Vue рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ)ред

рдЖрдЗрдП рдЗрди рдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

рдирдВрдмрд░ рд╡рди рдПрд░рд░ рд╣реИрдВрдбрд▓рд░: рдПрд░рд░рд╣реИрдВрдбрд▓рд░


рдкрд╣рд▓рд╛ рдЙрдкрд╛рдп рддреНрд░реБрдЯрд┐рд╣реИрдВрдбрд▓рд░ рд╣реИ ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдерд╛, рдпрд╣ Vue.js рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рд╣реИред рдЖрдк рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 Vue.config.errorHandler = function(err, vm, info) { } 

рдЙрдкрд░реЛрдХреНрдд рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ рдореЗрдВ, рдЗрд░реЗрдЯ рд╡рд░реНрддрдорд╛рди рддреНрд░реБрдЯрд┐ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ, рдЬрд╛рдирдХрд╛рд░реА Vue рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╕реВрдЪрдирд╛ рдХрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдФрд░ vm рд╡рд░реНрддрдорд╛рди Vue рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд╣реА рд╡реЗрдм рдкреЗрдЬ рдкрд░ рдХрдИ Vue рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдЙрди рд╕рднреА рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 Vue.config.errorHandler = function(err, vm, info) { console.log(`Error: ${err.toString()}\nInfo: ${info}`); } 

рдкрд╣рд▓реА рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХреЛрдб рдХреЛрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ред

рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рддреНрд░реБрдЯрд┐ рд╕рдВрд╕рд╛рдзрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдирд┐рдореНрди рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ:

 Error: ReferenceError: x is not defined Info: render 

рдЕрдВрдд рдореЗрдВ, рддреАрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ:

 Error: ReferenceError: x is not defined Info: v-on handler 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рдкрд┐рдЫрд▓реЗ рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ "рдЬрд╛рдирдХрд╛рд░реА" рдХрд┐рддрдиреА рдЙрдкрдпреЛрдЧреА рд╣реИред рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреВрд▓ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдирдВрдмрд░ рджреЛ: warnHandler


warnHandler рд╣реИрдВрдбрд▓ - рдЖрдк рдХреНрдпрд╛ рд╕реЛрдЪреЗрдВрдЧреЗ? - рдЪреЗрддрд╛рд╡рдиреАред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЗрд╕ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рднреА рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ:

 Vue.config.warnHandler = function(msg, vm, trace) { } 

рдкрд╣рд▓реЗ рджреЛ рддрд░реНрдХреЛрдВ - msg рдФрд░ vm - рдХреЗ рд▓рд┐рдП рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЯреНрд░реЗрд╕ рддрд░реНрдХ рдПрдХ рдШрдЯрдХ рд╡реГрдХреНрд╖ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

 Vue.config.warnHandler = function(msg, vm, trace) { console.log(`Warn: ${msg}\nTrace: ${trace}`); } 

рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдЕрдм рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдВрдбрд▓рд░ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрддрд╛ рд╣реИ:



рджреВрд╕рд░рд╛ рдФрд░ рддреАрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред рддреАрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд╛рдЗрд╡ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рд╣реИрдВред




рдирдВрдмрд░ рддреАрди рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░: рд░реЗрдВрдбрд░рд░


рдЕрдм рдореИрдВ рдПрдХ рддреАрд╕рд░реА рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рд╡рд┐рдзрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВрдВрдЧрд╛: рд░реЗрдВрдбрд░ рдХрд░реЗрдВред рдкрд┐рдЫрд▓реЗ рджреЛ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдЙрдкрдХрд░рдг рдШрдЯрдХ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдирд╣реАрдВ рд╣реИред WarnHandler рдХреЗ рд╕рд╛рде рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдЙрддреНрдкрд╛рджрди рд╣реИрдВрдбрд▓рд░ рдЕрдХреНрд╖рдо рд╣реИред

рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдЕрдкрдиреЗ рдХрдВрдкреЛрдиреЗрдВрдЯ / рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдбрд╛рд▓реЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рдЙрджрд╛рд╣рд░рдг рд╣реИред

 const app = new Vue({ el:'#app', renderError (h, err) { return h('pre', { style: { color: 'red' }}, err.stack) } }) 

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


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

рдирдВрдмрд░ рдЪрд╛рд░ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░: errorCaptured


рдЕрдВрдд рдореЗрдВ, рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рдЯреВрд▓ (рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ) рд╣реИ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рднреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдФрд░, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдЕрднреА рднреА рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реИред рдкреНрд░рд▓реЗрдЦрди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╣рддрд╛ рд╣реИ:

тАЬрдХрд┐рд╕реА рднреА рдмрдЪреНрдЪреЗ рдХреЗ рдШрдЯрдХ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╣реБрдХ рдХреЛ рддреАрди рддрд░реНрдХ рдорд┐рд▓рддреЗ рд╣реИрдВ: рдПрдХ рддреНрд░реБрдЯрд┐, рдШрдЯрдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛, рдФрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬрд┐рд╕рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрдЬ рдХреА рдЧрдИ рдереА рдХрд┐ рддреНрд░реБрдЯрд┐ рдХрд╣рд╛рдБ рджрд░реНрдЬ рдХреА рдЧрдИ рдереАред рддреНрд░реБрдЯрд┐ рдХреЗ рдЕрдзрд┐рдХ рдкреНрд░рд╕рд╛рд░ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред "

рдореЗрд░реЗ рд╢реЛрдз рдХреЗ рдЕрдиреБрд╕рд╛рд░ (рдлрд┐рд░, рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рдВрджреЗрд╣ рдХрд░рддрд╛ рд╣реВрдВ), рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЙрд╕ рдореВрд▓ рдШрдЯрдХ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдмрд╛рд▓ рдШрдЯрдХ рдХреА рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЦреНрдп Vue рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЙрд╕ рдШрдЯрдХ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрдЪреНрдЪреЗ рд╣реИрдВред

рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдФрд░ рдмрд╛рд▓ рдШрдЯрдХреЛрдВ рдХрд╛ рдпрд╣ рд╕реЗрдЯ рдмрдирд╛рдпрд╛:

 Vue.component('cat', { template:` <div><h1>Cat: </h1> <slot></slot> </div>`, props:{ name:{ required:true, type:String } }, errorCaptured(err,vm,info) { console.log(`cat EC: ${err.toString()}\ninfo: ${info}`); return false; } }); Vue.component('kitten', { template:'<div><h1>Kitten: {{ dontexist() }}</h1></div>', props:{ name:{ required:true, type:String } } }); 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдмрд┐рд▓реНрд▓реА рдХреЗ рдмрдЪреНрдЪреЗ рдХреЗ рдШрдЯрдХ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред рдЕрдм, рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ,

 <div id="app" v-cloak> <cat name="my cat"> <kitten></kitten> </cat> </div> 

рдореБрдЭреЗ рд╣реИрдВрдбрд▓рд░ рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛:

 cat EC: TypeError: dontexist is not a function info: render 

рдЖрдк рдЗрд╕реЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред


рддреЛ рд╣рд╛рдБ, рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЙрдкрдХрд░рдгред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ / рдмрд╛рд▓ рд╕рдВрдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде рдШрдЯрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЯреВрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдбреЗрд╡рд▓рдкрд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдЕрдЧрд░ рдРрд╕рд╛ рд╡рд┐рднрд╛рдЬрди рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ, рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдкреНрд░рднрд╛рд╡ рд╣реИред

рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдм рдХреБрдЫ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдЙрдкрдХрд░рдг: window.onerror



рдЕрдВрддрд┐рдо (рдФрд░ рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА) рд╡рд┐рдХрд▓реНрдк window.onerror рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЖрдкрдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдкрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдирд┐рдореНрди рдкреНрд░рд╛рд░реВрдк рд╣реИрдВ:

 window.onerror = function(message, source, line, column, error) { } 

рд╕рдВрднрд╡рдд: рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ рдЖрдк рдЬрд┐рд╕ рдЪреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддреЗ, рд╡рд╣ рдХреЗрд╡рд▓ рд╕реНрд░реЛрдд рддрд░реНрдХ рдХрд╛ рдЕрд░реНрде рд╣реИ, рдЬреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ URL рд╣реИред

рдпрд╣реАрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдорд╕реНрддреАред рдпрджрд┐ рдЖрдк рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди Vue.config.errorHandler рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреА рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред Vue рдЖрдкрдХреЛ Vue.config.errorHandler рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреЛ рдЙрд╕рдХреА рд╕реАрдорд╛ рд╕реЗ рдкрд░реЗ рдкреНрд░рдЪрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╢рд╛рдпрдж, рдпрд╣ рдХреБрдЫ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ ... рдореБрдЭреЗ рдпрд╣ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рдордЭрджрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдЕрдЬрдирдмреА рдЪреАрдЬ: рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреА Vue рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред рдпрд╣ рднреА window.onerror рд╣реИрдВрдбрд▓рд░ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдПрдХ рдЗрд╕реА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде CodePen рдкрд░ рдПрдХ рдбреЗрдореЛ рд╣реИред рдореИрдВрдиреЗ рдПрд░рд░рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреА рдереА, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЯрд┐рдкреНрдкрдгреА рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛: рдпрджрд┐ рдЖрдк рджреВрд╕рд░рд╛ рдмрдЯрди рджрдмрд╛рддреЗ рд╣реИрдВред


рдирд┐рд╖реНрдХрд░реНрд╖


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдХреА рд╕рд╛рдордЧреНрд░реА рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреАред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕ рд╡рд┐рд╖рдп рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдпрд╣ рдкрдврд╝рдХрд░ рдЦреБрд╢реА рд╣реБрдИ рдХрд┐ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░ рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ!

рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдлреЛрдЯреЛ: рд▓реЗрдЦрдХ - рдбреЗрд╡рд┐рдб рдХреЛрд╡рд▓реЗрдВрдХреЛ , рдЕрдирдкреНрд▓реИрд╢ рд╡реЗрдмрд╕рд╛рдЗрдЯ

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


All Articles