We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Vuex是一个专为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
其实最简单理解为,在我们写Vue组件中,一个页面多个组件之间想要通信数据,那你可以使用Vuex
路由-》管理的是组件流动
Vuex-》管理的是数据流动
没有Vuex之前,组件数据来源
Vuex
安装必须的依赖
yarn add vuex --save npm install vuex --save
在一个模块化的打包系统中,您必须显式地通过Vue.use()来安装 Vuex:
Vue.use()
import Vue from 'vue'//var Vue = require('vue') import Vuex from 'vuex'//var Vuex = require('vuex') Vue.use(Vuex)
每一个 Vuex 应用的核心就是 store(仓库)。store 基本上就是一个容器,它包含着你的应用中大部分的状态(state)。Vuex 和单纯的全局对象有以下两点不同:
store
// 实例化Vuex,创建一个仓库 const store = new Vuex.Store({ // 状态 // 该库存数据的地方 state: { // 状态值 count: 0, author: 'lemon' }, // 修改数据的方法 mutations: { // 修改数据的第一个方法 increment(state) { state.count++ } } }) // 暴露store仓库到`main.js`的根容器里面 export default store
// 引入仓库 import store from './configs/store.js' // Root容器 let vm = new Vue({ el: "#lemon", // 挂载路由 router, // 挂载仓库 store, // 把App组件挂载到#app的这个节点上 render: h => h('router-view'), })
第一种方法
beforeCreate() { // 来自于vuex仓库 console.log(this.$store.state.author) // 来自于组件自定义 console.log(this.title) }
第二种方法
先定义store中的getters
getters
getters: { // 获取author的方法 getAuthor(state) { return state.author + ' Yeah' }, getCount(state) { return state.count } }
通过属性访问 Getter 会暴露为store.getters对象,你可以以属性的形式访问这些值
store.getters
computed: { // 从仓库里面去取值 title(){ return this.$store.getters.getAuthor } }
先定义store中的mumat
mumat
// 修改数据的方法 mutations: { // 修改数据的第一个方法 editCount(state) { state.count++ }, // 修改仓库中state中的author editAuthor(state, data) { state.author = data } }
然后在组件触发commit事件
commit
methods: { editAuthor() { console.log(this.$store); // 触发store里面的mutations,把store里面的author改为laotian this.$store.commit('editAuthor','laotian') } }
action
mutations
state
const store = new Vuex.Store({ state: { getSearchName: 'hello vuex, I am wscats', }, //接受组件commit传过来的数据并保存到state中,this.$store.commit('changeSearchName', this.searchName); mutations: { changeSearchName: function(state, a) { state.searchName = a; }, }, //可以从组件调用此方法获取值,一般配合计算属性动态获取值 //(1)return this.$store.state.searchName //(2)return this.$store.getters.getSearchName getters: { getSearchName: function(state) { return state.searchName; } } })
视图中获取getSearchName值然后触发**search()**函数,看下面的this.$store.commit('changeSearchName', this.getSearchName);函数
this.$store.commit('changeSearchName', this.getSearchName);
<input type="search" @keyup="search()" v-model="getSearchName" placeholder="搜索" />
通过在根实例中注册store选项,该 store 实例会注入到根组件下的所有子组件中,且子组件能通过 this.$store访问到
this.$store
const app = new Vue({ store }).$mount('#app')
this.$store.state.title = “wscats”
通过commit方法提交直接触发mutations
methods: { search() { this.$store.commit('changeSearchName', this.getSearchName); } },
定义action,再用commit触发mutations,建议如果有异步的操作的话,可以配合action触发数据变动,但是如果是同步的话,可以在组件直接commit触发mutations
actions: { setChange(context, data) { context.commit('setCount', data) context.commit('settitle', data) }, setNews(context, data) { context.commit('setNews') } }
然后在组件中用dispatch触发action的改变
dispatch
methods: { loadMore() { this.$store.dispatch("setNews") } }
不推荐这种做法
computed: { searchName() { return this.$store.state.searchName; //或者return this.$store.state.searchName } },
先在store中定义getters
getters: { getTitle(state) { //处理数据 return state.title + "ed" } }
然后通过getters方法配合computed计算属性动态获取
computed
computed: { title() { //直接获取状态 //this.$store.state.title //通过getters获取状态 return this.$store.getters.getTitle } }
我们可以使用mapState来获取vuex里面的state的值,这样比getters方便很多
mapState
vuex
import { mapActions, mapState } from "vuex"; computed: { // 从仓库里面去取值 title() { return this.$store.getters.getAuthor; }, ...mapState({ author: state => state.author, }) }
The text was updated successfully, but these errors were encountered:
No branches or pull requests
Vuex
Vuex是一个专为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
其实最简单理解为,在我们写Vue组件中,一个页面多个组件之间想要通信数据,那你可以使用Vuex
没有
Vuex
之前,组件数据来源安装
安装必须的依赖
使用
在一个模块化的打包系统中,您必须显式地通过
Vue.use()
来安装 Vuex:五大概念
导出store
每一个 Vuex 应用的核心就是 store(仓库)。
store
基本上就是一个容器,它包含着你的应用中大部分的状态(state)。Vuex 和单纯的全局对象有以下两点不同:挂载仓库
获取数据源的数据
第一种方法
第二种方法
先定义
store
中的getters
通过属性访问
Getter 会暴露为
store.getters
对象,你可以以属性的形式访问这些值修改数据的方法
先定义
store
中的mumat
然后在组件触发
commit
事件组件间数据的流动
action
mutations
state
的数据mutations
state
的数据getters
state
的数据视图中获取getSearchName值然后触发**search()**函数,看下面的
this.$store.commit('changeSearchName', this.getSearchName);
函数通过在根实例中注册store选项,该 store 实例会注入到根组件下的所有子组件中,且子组件能通过
this.$store
访问到往state设置值
直接设置
state
的值直接触发mutations
通过
commit
方法提交直接触发mutations
触发actions
定义
action
,再用commit
触发mutations
,建议如果有异步的操作的话,可以配合action
触发数据变动,但是如果是同步的话,可以在组件直接commit
触发mutations
然后在组件中用
dispatch
触发action
的改变从state获取值
直接获取state的值
不推荐这种做法
通过getters方法获取
先在
store
中定义getters
然后通过
getters
方法配合computed
计算属性动态获取mapState
我们可以使用
mapState
来获取vuex
里面的state
的值,这样比getters
方便很多参考文档
The text was updated successfully, but these errors were encountered: