🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 要点 通过action 开发一个事件 通过commit 传给 mutations 改变数据 store里的数据可以直接在vue里使用 ## vuex ### 1.组件派发一个事件给vuex的actions ``` methods:{ handleClick(event){ this.$store.dispatch("changeLetter",event.target.innerText) } } ``` ### 2.在vuex中接收传递过来的事件 ``` import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ state: { letter:"" }, mutations: { }, actions: { <!-- 在这里接收 --> changeLetter(ctx,letter){ <!-- ctx表示上下文,letter传递过来的参数 --> ctx.commit("changeLetter",letter) } } }) ``` ### 3.将actions中传递过来的数据,commit给mutations ``` mutations: { changeLetter(state,letter){ //state表示vuex里的state ,letter是actions传递过来的参数 state.letter = letter } }, ``` ### 4.在页面中直接使用 ``` {{this.$store.state.letter}} ``` ### 5.通过计算属性的到letter ``` computed:{ letter(){ return this.$store.state.letter } }, ``` ### 6.通过watch属性侦听letter的变化 ``` watch:{ letter(){ let element = this.$refs[this.letter][0] this.scroll.scrollToElement(element) } } ``` ##简化vuex ### 不派发给actions 直接派发给 mutations this.$store.commit("changeLetter",event.target.innerText) 省略步骤2