uniapp使用computed和store遇坑

moonjerx
2022-09-22 / 0 评论 / 248 阅读 / 正在检测是否收录...

1.用户登录后存储用户信息到 uni.setStorageSync(userInfo)
2.在 vuexstate 中写方法


state: {
    userInfo: () => Storage.getUserInfo()
},
getters: {
    getUserInfo(state) {
        return state.userInfo()
    },
},
mutations: {
    setUserInfo(state, data) {
        state.userInfo = () => data
    },
},
actions: {
    setUserInfo(context, data) {
        context.commit('setUserInfo', data)
    }
}

试探过的无效方法:

getters: {
    getUserInfo(state) {
        return Storage.getUserInfo()
    }
},

3.个人中心页面 user-center.vuetabbar.vue 的子组件页面,在 user-center.vue 中的 computed 中直接使用 this.$Storage.getUserInfo() 方法 无法及时获取数据更新
遂不得已而采用vuex机制来保证页面数据及时更新

computed: {
    syncUserInfo: function() {
        return this.$store.getters.getUserInfo || {}
    }
},

以上方法,只更新 Storage.getUserInfo() 数据,state变量是不会同步渲染更新的,必须调用this.$store.commit('setUserInfo', userInfo)来更新用户信息后才会全局更新
4.vuex是非持久化数据,所以
(1)通过 uni.setStorageSync(userInfo) 来做数据持久化
(2)通过vuex机制来做数据的全局同步更新
(3)两者结合实现App全局变量数据更新
5.解决了以下几个问题
(1)诸如用户信息、用户财务信息等App全局变量的数据一致性
(2)避免了在不同页面频繁请求同一接口获取用户信息
(3)在用户登录时获取用户信息后提前渲染用户信息页面,增强用户前端体验

0

评论 (0)

取消

您的IP: