详解如何实现vuex(详细教程)
本篇文章主要介绍了如何实现一个简单的 vuex,现在分享给大家,也给大家做个参考。
首先我们需要知道为何要使用 vuex。父子组件通信用 prop 和自定义事件可以搞定,简单的非父子组件通信用 bus(一个空的 Vue 实例)。那么使用 vuex 就是为了解决复杂的非父子组件通信。
仅仅会使用 vuex 没什么,看过文档敲敲代码大家都会。难道你就不想知道 vuex 是如何实现的?!
抛开 vuex 的源码,我们先来想想如何实现一个简单的 "vuex"。有多简单呢,我不要 getter、mutation、action 等,我只要 state 就行了。
非父子组件通信
在实现之前,我们得来温故一下 bus 的实现,借用官网的例子:
var bus = new Vue() // 触发组件 A 中的事件 bus.$emit('id-selected', 1) // 在组件 B 创建的钩子中监听事件 bus.$on('id-selected', function (id) { // ... })
遥想当年,实例化后的 bus 不知放哪好,最后无奈将其放到了 window 下,一直 window.bus 的使用。虽然这样也没问题,但还是影响到了全局作用域。
突然的某一天,我发现可以挂载在 vue 的根实例下(从此告别 window.bus),于是便有了:
var app = new Vue({ el: '#app', bus: bus }) // 使用 bus app.$options.bus // or this.$root.$options.bus
然后又发现了,bus 其实不只是 on 事件才可以通信。其实 bus 是一个 Vue 实例,其中 data 是响应的。比如在 app 这个根实例下有两个非父子组件,都使用到了 bus 的 data,那么它们是响应同步的。
var bus = new Vue({ data: { count: 0 } })
以上,子组件 a 修改了 count,如果子组件 b 有用到 count,那么它就能响应到最新 count 的值。
说了这么多,你还没发现吗?这个不就是实现了非组件之间通信,vuex 的 state 吗?!
封装 bus
是的,把刚刚的 bus 封装一下,这个就是一个最简单的 "vuex" (仅仅只有 state 的功能)。首先,我们将有一个根实例 app ,实例下有两个非父子组件 childA 和 childB 。
html 代码的实现如下:
<p id="app"> <child-a></child-a> <child-b></child-b> </p>
非父子组件的实现
然后是两个非父子组件和 app 的实现,子组件都使用到了 bus 的 count,这里用 store.state 表示,跟 vuex 一致:
// 待实现 const store = new Store(Vue, { state: { count: 0 } }) // 子组件 a const childA = { template: '<button @click="handleClick">click me</button>', methods: { handleClick () { this.$store.state.count += 1 } } } // 子组件 b const childB = { template: '<p>count: {{ count }}</p>', computed: { count () { return this.$store.state.count } } } new Vue({ el: '#app', components: { 'child-a': childA, 'child-b': childB }, store: store })
看到代码里还有一个 Store 待实现。所需要的参数,因为这里懒得用 Vue.use() ,所以直接将 Vue 作为参数传入以供使用,然后第二个参数跟我们使用 vuex 传入的参数一致。
Store 的实现
接下来就是 Store 的实现,两步实现:
创建一个 bus 实例;
让子组件都能访问到 this.$store。
第 1 步骤上面已经有了,第 2 步骤主要用到了 Vue.mixin 来全局混入,但仅仅只是找到有 store 的根实例并赋值 Vue 原型上的 store,也能够让根实例 app 不用专门写 mixins 混入。
class Store { constructor (Vue, options) { var bus = new Vue({ data: { state: options.state } }) this.install(Vue, bus) } install (Vue, bus) { Vue.mixin({ beforeCreate () { if (this.$options.store) { Vue.prototype.$store = bus } } }) } }
实现的 Store 就是一个简单的 "vuex",它拥有了 vuex 的 state,足够让非父子组件之间进行简单通信。
在 Store 的构造函数里创建一个 bus 实例,并将其注入 Vue 的原型,实现了组件都能访问到 this.$store 即 bus 实例。 this.$store 就是一个 Vue 实例,所以访问了 this.$store.state.count 实际上就是访问到了 data,从而实现了非父子组件之间的响应同步。全部源码参考这里 。
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
使用node应用中timing-attack存在哪些安全漏洞
在Vue组件中如何使用 TypeScript的方法(详细教程)
Atas ialah kandungan terperinci 详解如何实现vuex(详细教程). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Nombor siri cakera keras ialah pengecam penting cakera keras dan biasanya digunakan untuk mengenal pasti cakera keras secara unik dan mengenal pasti perkakasan. Dalam sesetengah kes, kami mungkin perlu menanyakan nombor siri cakera keras, seperti semasa memasang sistem pengendalian, mencari pemacu peranti yang betul atau melakukan pembaikan cakera keras. Artikel ini akan memperkenalkan beberapa kaedah mudah untuk membantu anda menyemak nombor siri cakera keras. Kaedah 1: Gunakan Windows Command Prompt untuk membuka command prompt. Dalam sistem Windows, tekan kekunci Win+R, masukkan "cmd" dan tekan kekunci Enter untuk membuka arahan

Bagaimana untuk menulis penjana laporan prestasi pelajar yang mudah menggunakan Java? Penjana Laporan Prestasi Pelajar ialah alat yang membantu guru atau pendidik menjana laporan prestasi pelajar dengan cepat. Artikel ini akan memperkenalkan cara menggunakan Java untuk menulis penjana laporan prestasi pelajar yang mudah. Pertama, kita perlu menentukan objek pelajar dan objek gred pelajar. Objek pelajar mengandungi maklumat asas seperti nama pelajar dan nombor pelajar, manakala objek skor pelajar mengandungi maklumat seperti skor mata pelajaran pelajar dan gred purata. Berikut ialah definisi objek pelajar mudah: awam

Bagaimana untuk menulis sistem tempahan dalam talian yang mudah melalui PHP Dengan populariti Internet dan mengejar kemudahan pengguna, sistem tempahan dalam talian menjadi semakin popular. Sama ada restoran, hospital, salun kecantikan atau industri perkhidmatan lain, sistem tempahan dalam talian yang mudah boleh meningkatkan kecekapan dan memberikan pengguna pengalaman perkhidmatan yang lebih baik. Artikel ini akan memperkenalkan cara menggunakan PHP untuk menulis sistem tempahan dalam talian yang mudah dan memberikan contoh kod khusus. Cipta pangkalan data dan jadual Pertama, kita perlu mencipta pangkalan data untuk menyimpan maklumat tempahan. Dalam MyS

Permulaan Pantas: Melaksanakan Sistem Pengurusan Perpustakaan Mudah Menggunakan Fungsi Bahasa Go Pengenalan: Dengan pembangunan berterusan bidang sains komputer, keperluan aplikasi perisian menjadi semakin pelbagai. Sebagai alat pengurusan biasa, sistem pengurusan perpustakaan juga telah menjadi salah satu sistem yang diperlukan untuk banyak perpustakaan, sekolah dan perusahaan. Dalam artikel ini, kami akan menggunakan fungsi bahasa Go untuk melaksanakan sistem pengurusan perpustakaan yang mudah. Melalui contoh ini, pembaca boleh mempelajari penggunaan asas fungsi dalam bahasa Go dan cara membina program praktikal. 1. Idea reka bentuk: Mari dahulu

Bagaimana untuk menulis sistem cadangan muzik mudah dalam C++? Pengenalan: Sistem pengesyoran muzik ialah hotspot penyelidikan dalam teknologi maklumat moden Ia boleh mengesyorkan lagu kepada pengguna berdasarkan pilihan muzik dan tabiat tingkah laku mereka. Artikel ini akan memperkenalkan cara menggunakan C++ untuk menulis sistem cadangan muzik yang ringkas. 1. Kumpul data pengguna Pertama, kita perlu mengumpul data keutamaan muzik pengguna. Keutamaan pengguna untuk pelbagai jenis muzik boleh diperolehi melalui tinjauan dalam talian, soal selidik, dsb. Simpan data dalam fail teks atau pangkalan data

Bagaimana untuk menulis permainan penyapu ranjau mudah dalam C++? Penyapu ranjau ialah permainan teka-teki klasik yang memerlukan pemain mendedahkan semua blok mengikut susun atur medan periuk api yang diketahui tanpa memijak lombong. Dalam artikel ini, kami akan memperkenalkan cara menulis permainan penyapu ranjau mudah menggunakan C++. Pertama, kita perlu menentukan tatasusunan dua dimensi untuk mewakili peta permainan Penyapu Ranjau. Setiap elemen dalam tatasusunan boleh menjadi struktur yang digunakan untuk menyimpan status blok, seperti sama ada ia didedahkan, sama ada terdapat lombong, dsb. Di samping itu, kita juga perlu menentukan

Mukadimah: Baru-baru ini, saya tiba-tiba ingin memindahkan persekitaran pembangunan ke Linux Pada masa yang sama, saya juga sedang bersiap untuk membaca beberapa kod sumber terbuka pada github Saya mendapati bahawa projek sumber terbuka secara amnya diuruskan dengan cmake. Jadi saya hanya bermain-main dengannya pada mesin maya saya sendiri. Saya tidak tahu apa itu cmake pada mulanya, tetapi kemudian saya secara kasar memahami peranannya melalui beberapa pengubahsuaian sebenarnya memberitahu pengkompil bagaimana untuk menyusun dan memautkan kod sumber. Anda mungkin ingin bertanya jika tiada makefile, mengapa anda memerlukannya? Ini melibatkan isu merentas platform. Di bawah platform Windows, ini diuruskan melalui fail projek Jika cmake tidak digunakan, maka kita perlu menulis fail projek yang sepadan dan membuat untuk sistem tetingkap dan Linux.

Panduan Reka Bentuk Jadual MySQL: Mencipta Jadual Kehadiran Pekerja yang Mudah Dalam pengurusan perusahaan, pengurusan kehadiran pekerja adalah tugas yang penting. Untuk merekod dan mengira kehadiran pekerja dengan tepat, kami boleh menggunakan pangkalan data MySQL untuk mencipta helaian kehadiran pekerja yang mudah. Artikel ini akan membimbing anda cara mereka bentuk dan mencipta jadual ini serta memberikan contoh kod yang sepadan. Pertama, kita perlu mengenal pasti medan yang diperlukan untuk helaian kehadiran pekerja. Secara umumnya, helaian kehadiran pekerja perlu mengandungi sekurang-kurangnya medan berikut: ID pekerja, tarikh, masa bekerja, masa luar tugas
