uniapp是一种跨平台的开发框架,它可以轻松地开发小程序、H5、App等应用程序。其中,vuex是uniapp的状态管理库,用于管理和维护应用程序中的所有组件的状态,以及在组件之间共享数据。
一、vuex基本概念
1. state:用于管理应用程序中所有组件的状态,它是仅可读的。
2. mutations:用于修改state中的数据,仅可在mutation函数中修改,保证数据修改的可控性。
3. actions:用于处理异步操作或批量改变状态的操作,可以通过commit触发mutations,修改state中的数据。
4. getters:用于派生新的状态,即通过state中的数据计算得出的新的数据。
5. modules:将store分割成为模块,每个模块可以拥有自己的state、mutations、actions和getters。
二、vuex的使用方法
1. 创建store
在uniapp项目中创建store.js文件,导出一个Vue实例,用于管理应用程序中的所有组件的状态以及mutations、actions和getters。在main.js文件中引入store,并且将它挂载到Vue实例上。
```javascript
//store.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {//state},
mutations: {//mutations},
actions: {//actions},
getters: {//getters}
})
export default store
```
```javascript
//main.js
import Vue from 'vue'
import App from './App'
import store from './store'
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
...App,
store
})
app.$mount()
```
2. state的使用
在组件中使用state的数据,需要通过this.$store.state来获取。
```javascript
//App.vue
export default {
computed: {
count () {
return this.$store.state.count
}
}
}
```
3. mutations的使用
使用mutations函数修改state中的数据,需要通过commit来触发。mutations函数必须是同步函数,不支持异步操作。
```javascript
//store.js
const store = new Vuex.Store({
state: {
count: 0,
},
mutations: {
add(state, payload) {
state.count += payload
}
},
})
```
```javascript
//App.vue
export default {
computed: {
count () {
return this.$store.state.count
}
},
methods: {
add () {
this.$store.commit('add', 1)
}
}
}
```
4. actions的使用
使用actions函数修改state中的数据,需要通过dispatch来触发。actions函数支持异步操作,并且可以通过commit触发mutations函数。
```javascript
//store.js
const store = new Vuex.Store({
state: {
count: 0,
},
mutations: {
add(state, payload) {
state.count += payload
}
},
actions: {
asyncAdd({ commit }, payload) {
setTimeout(() => {
commit('add', payload)
}, 1000)
}
}
})
```
```javascript
//App.vue
export default {
computed: {
count () {
return this.$store.state.count
}
},
methods: {
async asyncAdd () {
await this.$store.dispatch('asyncAdd', 1)
}
}
}
```
5. getters的使用
使用getters函数派生新的状态,在组件中通过this.$store.getters来获取。
```javascript
//store.js
const store = new Vuex.Store({
state: {
count: 0,
},
getters: {
doubleCount: state => state.count * 2,
},
})
```
```javascript
//App.vue
export default {
computed: {
count () {
return this.$store.state.count
},
doubleCount () {
return this.$store.getters.doubleCount
}
}
}
```
6. modules的使用
使用modules将store分割成为模块,每个模块可以拥有自己的state、mutations、actions和getters。
```javascript
//store.js
const moduleA = {
state: { ... },
mutations: { ... },
actions: { ... },
getters: { ... }
}
const moduleB = {
state: { ... },
mutations: { ... },
actions: { ... },
getters: { ... }
}
const store = new Vuex.Store({
modules: {
moduleA,
moduleB
}
})
```
三、总结
vuex是uniapp开发中