Saya menggunakan vuex
dan vuejs 2
bersama - sama.
Saya baru vuex
, saya ingin menonton store
perubahan variabel.
Saya ingin menambahkan watch
fungsi divue component
Inilah yang saya miliki sejauh ini:
import Vue from 'vue';
import {
MY_STATE,
} from './../../mutation-types';
export default {
[MY_STATE](state, token) {
state.my_state = token;
},
};
Saya ingin tahu apakah ada perubahan dalam my_state
Bagaimana saya menonton store.my_state
di komponen vuejs saya?
javascript
vue.js
vuejs2
vuex
raffffffff
sumber
sumber
Jawaban:
Katakanlah, misalnya, bahwa Anda memiliki sekeranjang buah-buahan, dan setiap kali Anda menambah atau menghapus buah dari keranjang, Anda ingin (1) menampilkan info tentang jumlah buah, tetapi Anda juga (2) ingin diberi tahu hitungan buah dalam beberapa mode mewah ...
buah-count-component.vue
Harap dicatat, bahwa nama fungsi di
watch
objek, harus cocok dengan nama fungsi dicomputed
objek. Dalam contoh di atas namanyacount
.Nilai baru dan lama dari properti yang ditonton akan diteruskan ke panggilan balik panggilan (fungsi hitungan) sebagai parameter.
Toko keranjang bisa terlihat seperti ini:
fruit-basket.js
Anda dapat membaca lebih lanjut di sumber-sumber berikut:
sumber
watch
tindakan harus dibagi menjadi dua langkah: 1) Pertama, memeriksa apakah data keinginan di-cache dan apakah itu hanya mengembalikan data yang di-cache; 2) Jika cache gagal saya perlu tindakan aynx async untuk mengambil data, tetapi ini tampaknya menjadiaction
pekerjaan. Semoga pertanyaan saya masuk akal, terima kasih!Anda tidak harus menggunakan pengamat komponen untuk mendengarkan perubahan status. Saya sarankan Anda untuk menggunakan fungsi getter dan memetakannya di dalam komponen Anda.
Di toko Anda:
Anda harus dapat mendengarkan perubahan apa pun yang dilakukan di toko Anda dengan menggunakan
this.myState
komponen Anda.https://vuex.vuejs.org/en/getters.html#the-mapgetters-helper
sumber
Sesederhana:
sumber
function(n) { console.log(n); }
Seperti disebutkan di atas, bukan ide yang baik untuk menonton perubahan secara langsung di toko
Tetapi dalam beberapa kasus yang sangat jarang mungkin bermanfaat bagi seseorang, jadi saya akan meninggalkan jawaban ini. Untuk kasus lain, silakan lihat jawaban @ gabriel-robert
Anda dapat melakukan ini
state.$watch
. Tambahkan ini dalamcreated
metode Anda (atau di mana Anda perlu ini dieksekusi) dalam komponenLebih detail: https://vuex.vuejs.org/api/#watch
sumber
Saya pikir si penanya ingin menggunakan arloji dengan Vuex.
sumber
Ini untuk semua orang yang tidak dapat menyelesaikan masalah mereka dengan getter dan sebenarnya sangat membutuhkan pengamat, misalnya untuk berbicara dengan hal-hal pihak ketiga yang tidak terkait (lihat Vue Watchers tentang kapan harus menggunakan pengamat).
Pengamat komponen Vue dan nilai yang dihitung keduanya juga bekerja pada nilai yang dihitung. Jadi tidak berbeda dengan vuex:
jika hanya tentang menggabungkan keadaan lokal dan global, dokumen mapState juga memberikan contoh:
sumber
jika Anda menggunakan naskah maka Anda dapat:
sumber
Buat status lokal variabel toko Anda dengan menonton dan mengatur perubahan nilai. Sedemikian rupa sehingga perubahan variabel lokal untuk input-bentuk v-model tidak secara langsung bermutasi variabel toko .
sumber
Cara terbaik untuk menonton perubahan toko adalah menggunakan
mapGetters
seperti yang dikatakan Gabriel. Tetapi ada kasus ketika Anda tidak bisa melakukannyamapGetters
misalnya Anda ingin mendapatkan sesuatu dari toko menggunakan parameter:dalam hal ini Anda tidak dapat menggunakan
mapGetters
. Anda dapat mencoba melakukan sesuatu seperti ini sebagai gantinya:Namun sayangnya
todoById
akan diperbarui hanya jikathis.id
diubahJika Anda ingin Anda memperbarui komponen dalam
this.$store.watch
solusi kasus penggunaan seperti yang disediakan oleh Gong . Atau tangani komponen Anda secara sadar dan perbaruithis.id
saat Anda perlu memperbaruitodoById
.sumber
Jika Anda hanya ingin menonton sebuah milik negara dan kemudian bertindak dalam komponen sesuai dengan perubahan properti yang kemudian melihat contoh di bawah ini.
Di
store.js
:Dalam skenario ini, saya membuat
boolean
properti negara yang akan saya ubah di berbagai tempat dalam aplikasi seperti:Sekarang, jika saya perlu menonton properti negara bagian itu di beberapa komponen lain dan kemudian mengubah properti lokal saya akan menulis yang berikut di
mounted
hook:Pertama, saya mengatur pengamat pada properti negara dan kemudian dalam fungsi panggilan balik saya menggunakan
value
properti itu untuk mengubahlocalProperty
.Saya harap ini membantu!
sumber
Ketika Anda ingin menonton di tingkat negara bagian, itu bisa dilakukan dengan cara ini:
sumber
store.state
perubahan dengandispatch
tindakan negara dari komponen karena perilaku ini hanya berfungsi jika Anda menggunakan komponen itu. Anda juga mungkin berakhir dengan loop tak terbatas. Tonton untukstore.state
perubahan jarang digunakan, misalnya jika Anda memiliki komponen atau halaman yang harus melakukan beberapa tindakan berdasarkanstore.state
perubahan yang tidak dapat ditangani dengan menggunakan mapState yang dikomputasi hanya di mana Anda tidak dapat membandingkannewValue
vsoldValue
store.dispatch
? jika Anda ingin menanganistore.state
perubahan untukstore' why not handle it inside
store.mutations`?store.dispatch
dulu. Misalnya, saya ingin mendapatkan semua kota dari suatu negara setiap kali ada$store.state.country
perubahan, jadi saya menambahkan ini ke pengamat. Maka saya akan menulis panggilan ajax: distore.dispatch('fetchCities')
saya menulis:axios.get('cities',{params:{country: state.country }}).then(response => store.commit('receiveCities',response) )
Anda dapat menggunakan kombinasi tindakan Vuex , getter , properti yang dihitung , dan pengamat untuk mendengarkan perubahan pada nilai status Vuex.
Kode HTML:
Kode JavaScript:
Lihat demo JSFiddle .
sumber
Anda juga dapat berlangganan mutasi toko:
https://vuex.vuejs.org/api/#subscribe
sumber
Di dalam komponen, buat fungsi yang dikomputasi
Sekarang nama fungsi yang dihitung dapat ditonton, seperti
Perubahan yang dibuat di
vuex
negara bagianmy_state
akan mencerminkan fungsi yang dihitungmyState
dan memicu fungsi arloji.Jika negara
my_state
memiliki data bersarang, makahandler
opsi akan membantu lebih banyakIni akan menonton semua nilai bersarang di toko
my_state
.sumber
Anda juga dapat menggunakan mapState di komponen vue Anda untuk mengarahkan status dari store.
Di komponen Anda:
Di mana
my_state
variabel dari toko.sumber
sumber
Saya menggunakan cara ini dan berhasil:
store.js:
mutations.js
action.js
getters.js
Dan di komponen Anda di mana Anda menggunakan status dari toko:
Saat pengguna mengirimkan formulir, tindakan STORE akan dipanggil, setelah berhasil dibuat, mutasi CREATE_SUCCESS dilakukan setelah itu. Hidupkan createSuccess benar, dan dalam komponen, pengamat akan melihat nilai telah berubah dan memicu pemberitahuan.
isSuccess harus sesuai dengan nama yang Anda nyatakan di getters.js
sumber