jak z modułu vuex w którym mam w state daną pustą wartość (store > modules >search.js ), teraz chcę za pomocą mapState pobrać ją do komponentu
// components/movie.vue
{
computed: {
...mapState(['movie'])
// ...
}
// ...
}
Drugie pytanie to jak w pliku movies.vue mam polę input i chcę żeby użytkownik mógł wpisując zmieniać wartość w pliku search.js.
Jeśli chcesz podpiąć input bezpośrednio pod wartość ze store'a, sytuacja wygląda odrobinę inaczej. Najprościej po prostu podpiąć wartość pod v-model
<input type="text" v-model="$store.state.movie">
jednak jest to niezalecana metoda. W idealnym świecie, każda zmiana state powinna odbywać się przez mutacje.
W tym momencie przestaje być już tak różowo, bo trzeba napisać trochę nudnego/powtarzalnego kodu. Two way computed property:
<input type="text" v-model="movie">
// components/movie.vue
{
computed: {
movie: {
get () {
return this.$store.state.movie
},
set (value) {
this.$store.commit('updateMovie', value)
}
}
}
// ...
}
Plus do tego mutacja:
// store/modules/search.js
{
// ...
mutations: {
updateMovie (state, movie) {
state.movie = movie
}
}
// ...
}
Ale wtedy vue-toolsy mogą wszystko ładnie trackować, i nic w aplikacji nie dzieje się samo w jakichś dziwnych miejscach w templatkach. (W dodatku przy zagnieżdżonym state (czego powinno się unikać), to de facto jedyna metoda, która pozwala zachować reaktywność store'a)
Jeśli potrzebujesz odczytać wartość ze state'a, nie ma potrzebny tworzyć do niej gettera.