• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Vuex input pobieranie danych

Object Storage Arubacloud
0 głosów
455 wizyt
pytanie zadane 29 grudnia 2018 w JavaScript przez Mash92 Użytkownik (670 p.)
Witam, piszę program i chcę przejść na vuex, mianowicie szukam wskazówki 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 > movies.vue) szukałem wskazówek na stronie vuex ale nic mi nie wychodziło . 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 .
komentarz 29 grudnia 2018 przez niezalogowany

szukałem wskazówek na stronie vuex ale nic mi nie wychodziło 

W jaki sposób próbowałeś? Czy Twój moduł w storze ma własny namespace?

komentarz 29 grudnia 2018 przez Mash92 Użytkownik (670 p.)
const axios = require('axios');


const state = {
    movie: ' ',
  }
  
  const getters = {
    getMovie(state){
        return (state.movie)
    }
  }
   
  const mutations = {
  
  }
  
  const actions = {
      movevalue: function (){
        axios.get(`http://www.omdbapi.com/?t='${state.movie}'&apikey=3f487e0e`)
        .then((response) => {
        this.resoults = console.log(response);
      })
    }
  }
  
  export default {
    state,
    mutations,
    getters,
    actions
  }
  

tak wtgląda moduł search.js , i chcę żeby komponent movies.vue ( z inputa ) wysyłał do pola state movie (w search.js).

1 odpowiedź

0 głosów
odpowiedź 29 grudnia 2018 przez niezalogowany

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.

komentarz 3 stycznia 2019 przez Mash92 Użytkownik (670 p.)
tylko mam jeszcze jedno pytanie, bo mapaction działa, pobiera funkcje z modułu vuex a gdybym analogicznie chiał zrobić mapstate pobierająć z modułu ?
komentarz 3 stycznia 2019 przez niezalogowany

https://vuex.vuejs.org/guide/modules.html#namespacing

Dodaj do modułu:

namespaced: true
komentarz 4 stycznia 2019 przez Mash92 Użytkownik (670 p.)
import Vue from 'vue'
import Vuex from 'vuex'

import searchmove from './modules/searchmove'

Vue.use(Vuex)

export const store = new Vuex.Store({
    modules: {
      namespaced: true,
      searchmove
    }
  }) 

tak dodać ?

Jeszcze mam małe pytanie, czy jest jakaś dobra opcja, żeby dodać 2 fukcje do buttona z @click

 

komentarz 4 stycznia 2019 przez niezalogowany
Do modułu - na tym samym poziomie na którym są state, mutations, actions
komentarz 4 stycznia 2019 przez niezalogowany
Czy dobra opcja - to nie wiem. Sam pomysł nie wygląda najlepiej. Ale tak, da się:
@click="metodaX(); metodaY()"

Podobne pytania

0 głosów
1 odpowiedź 111 wizyt
pytanie zadane 21 lutego 2022 w JavaScript przez Pico Obywatel (1,330 p.)
0 głosów
2 odpowiedzi 599 wizyt
pytanie zadane 18 sierpnia 2018 w JavaScript przez mi-20 Stary wyjadacz (13,190 p.)
0 głosów
0 odpowiedzi 227 wizyt
pytanie zadane 22 września 2021 w JavaScript przez Piotr Kułakowski Początkujący (390 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...