uniapp vuex正确的打开方式

一、vuex与全局变量globalData的区别

  1. uni-app像小程序一样有globalData,是简单的全局变量,如果使用状态管理,请使用vuex在这里插入图片描述
  2. 一些简单的常量或变量,请使用globalData。涉及到响应式的数据和跨组件共享数据、跨页面共享数据,建议使用vuex

二、uniapp vuex使用

目录结构如下

目录结构

1. 根目录创建vuex目录,创建index.js文件
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

import cart from './modules/cart.js'
import users from './modules/users.js'
export default new Vuex.Store({
	state: {
		token: ''
	},
	getters: {
		hasLogin(state) {
			return !!state.token
		}
	},
	mutations: {
		setToken(state, data) {
			const { token, userInfo, uid, userID, userSig } = data
			state.isLogin = true
			state.token = token
			state.userInfo = userInfo
			state.myUserID = userID
			uni.setStorageSync("token", token);
			uni.setStorageSync("userInfo", userInfo);
			uni.setStorageSync('userID', userID)
			uni.setStorageSync('userSig', userSig)
		},
	},
	actions: {
		getUserInfo({commit},data) {
			commit('setToken', data)
		},
	},
	modules: {
		cart,
		users,
	}
})

2. 模块化代码
export default {
	state: {
		position: ''
	},
	getters: {},
	mutations: {
		setPositon(state, data) {
			state.position = data
		}
	},
	actions: {
		async updateUserPositon({ commit }, data, rootState) {
			uni.getLocation({
				type: "wgs84",
				success: (res) => {
					let getAddressUrl =
						"https://apis.map.qq.com/ws/geocoder/v1/?location=" + res.latitude + "," + res.longitude + "&key=xxx";
					uni.request({
						url: getAddressUrl,
						success: (res) => {
							if (res.statusCode == 200) {
								if (res.data && res.data.status == 0) {
									const position = res.data.result.address_component.city;
									commit('setPositon', position)
								}
							}
						},
					});
				},
				fail: (err) => {
					console.log(err)
				},
			});
		}
	}
}

3. 在 main.js 中导入store文件
import App from './App'
import Vue from 'vue'

import store from './vuex/index.js'
Vue.prototype.$store = store

Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
	store,
    ...App
})
app.$mount()
4. 调用
  • 直接调用
//	获取state中的值
this.$store.state.token
//	获取模块中state的值
this.$store.state.users.position

//	修改state中的值
this.$store.commit('setPositon', data);

// 调用actions中的方法
this.$store.dispatch('updateUserPositon',data)
  • 状态方法监控
import { mapState, mapMutations, mapActions} from 'vuex'
computed: {
	...mapState({
		position: state => state.users.position
	})
}
methods: {
  ...mapMutations(['setPositon']),
  ...mapActions(['updateUserPositon'])
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值