
рдпрд╣ рдЖрд▓реЗрдЦ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддреА рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдЧрд╛ рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╢реБрд░реБрдЖрддреА Vue + Vuex рдкрд░ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЧреЗрдЯрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╣рдо рд╣реЗрд▓реНрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдореИрдкрд╕реНрдЯреЗрдЯ рдФрд░ рдореИрдкрдЧреЗрдЯрд░реНрд╕ рдХреЛ рднреА рджреЗрдЦреЗрдВрдЧреЗред
рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ: рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЖрдкрдХреЛ Vue рдФрд░ Vuex рдХрд╛ рдореВрд▓ рдЬреНрдЮрд╛рди рд╣реИред
рдЕрдзреНрдпрд╛рдп 1. рдЧреЗрдЯрд░реНрд╕ рдХреНрдпрд╛ рд╣реИрдВред рдЕрдиреБрдЪрд┐рдд рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг
рдЧреЗрдЯреНрд╕ рд╡реЗрдХреНрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдШрдЯрдХреЛрдВ рдХреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
const store = new Vuex.Store({ state: {
рдпрд╣ рд╕рднреА рдкреБрд╕реНрддрдХреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рдШрдЯрдХ рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
export default { computed: {
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдзрд┐рднрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдкрдХреЛ рднрдВрдбрд╛рд░рдг рд╕реЗ рд╕реАрдзреЗ рдШрдЯрдХ рдореЗрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрд╢реЛрдзрди рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЧреЗрдЯрд░реНрд╕ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИрдВред рдЖрдЧреЗ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдЖрдк рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЧреЗрдЯрд░реНрд╕ рдХреЗ рдЕрдиреБрдЪрд┐рдд рдЙрдкрдпреЛрдЧ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдзреНрдпрд╛рдп 2. рднрдВрдбрд╛рд░рдг рд╕реЗ рдбреЗрдЯрд╛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП mapState рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрдврд╝рддрд╛ рд╣реИ:
рдЬрдм рдПрдХ рдШрдЯрдХ рдХреЛ рдХрдИ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдпрд╛ рдЧреЛрджрд╛рдо рдЧреЗрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрди рд╕рднреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдердХрд╛рдК рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк mapState рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рдХрд▓рд┐рдд рдЧреБрдг рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рдЖрдЗрдП рдЕрдкрдиреЗ рдШрдЯрдХ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдПрдХ рдЧреЗрдЯреНрдЯрд░ рдХреЗ рдмрдЬрд╛рдп рдореИрдкрд╕реНрдЯреИрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
import { mapState } from 'vuex'; export default { computed: { ...mapState([ 'books' ]) } }
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдПрдХ рдЧреЗрдЯрдЯрд░ рдХреЛ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЕрдм рдЙрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:
const store = new Vuex.Store({ state: {
рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рд╣реИ рдирд╛? рд╣рдордиреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЧреЗрдЯрд░реНрд╕ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓рд┐рдпрд╛ рдФрд░ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХрдо рдХрд░ рджреАред
рдЕрдзреНрдпрд╛рдп 3. рдХреНрдпреЛрдВ рдЧреЗрдЯрд░реНрд╕, рдЕрдЧрд░ рдХреЛрдИ рдореИрдкрд╕реНрдЯреИрдЯ рд╣реИ
рдФрд░ рдЕрднреА рднреА рдЙрдирдХреА рдЬрд░реВрд░рдд рд╣реИред рдЧреЗрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рднреА рдкреБрд╕реНрддрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкрдврд╝реЗрдВ )ред
рдЖрдЗрдП, рднрдВрдбрд╛рд░ рд╕реЗ рдкрдврд╝реА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдкреБрд╕реНрддрдХреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрдЯрд░ рдмрдирд╛рдПрдБ
const store = new Vuex.Store({ state: {
рдЕрдм рд╣рдорд╛рд░рд╛ рдШрдЯрдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
import { mapState } from 'vuex'; export default { computed: {
рдЗрд╕ рдкрд░ рдХреЛрдИ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА рдмрд╛рдд рд╣реИ рдЬреЛ рдЬрд╛рдирдиреЗ рдпреЛрдЧреНрдп рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдШрдЯрдХреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдЧреЗрдЯрд░ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЧрдгрдирд╛ рд╡рд┐рдзрд┐ рдореЗрдВ рд╣рд░ рдмрд╛рд░ рдЧреЗрдЯрд░реНрд╕ рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред MapGetters рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:
рд╕реБрдзрд╛рд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ: рдореИрдкрдЧреЗрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдордиреЗ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХрдо рдХрд░ рджреА рд╣реИред
рдЖрдк рдХреБрдЫ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрдВрдбрд╛рд░ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЧрдгрдирд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреА рдЖрдИрдбреА рдпрд╛ рдирд╛рдо рд╕реЗ рдПрдХ рдкреБрд╕реНрддрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдпрд╣ рд╣рдорд╛рд░реЗ рдЧреЗрдЯрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
const store = new Vuex.Store({ state: {
import { mapState, mapGetters } from 'vuex'; export default { computed: { ...mapState([ 'books' ]), ...mapGetters([ 'finishedBooks', 'getBookById' ]), getBook() {
рд╕рд╛рдордЧреНрд░реА рдмрдиреНрдзрди
- рдЬрдм рдЖрдкрдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рддреЛ рдЧреЗрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рднреА рдкреБрд╕реНрддрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкрдврд╝реЗрдВ), рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдореИрдкрд╕реНрдЯреЗрдЯ рд╣реЗрд▓реНрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- рдЙрдирдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреЗрдЯрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреЗрдЯрд░реНрд╕ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рджрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
- рдЬрдм рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдЧреЗрдЯреНрдЯрд░ рдкрд░рд┐рдгрд╛рдо рдЕрдкрдбреЗрдЯ рд╣реЛрддреЗ рд╣реИрдВред
рд░реВрд╕реА рдореЗрдВ рдЧреЗрдЯреНрдЯрд░ рдкреНрд░рд▓реЗрдЦрди
рдХреЛрдбрдкреЗрди рдкрд░ рдПрдХ рд▓реЗрдЦ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдЖрд╡реЗрджрди