• uniapp vue2 vuex 持久化


    1.vuex的使用

    一、uniapp中有自带vuex插件,直接引用即可

    二、在项目中新建文件夹store,在main.js中导入

    在根目录下新建文件夹store,在此目录下新建index.js文件
    在这里插入图片描述
    index.js

    import Vue from 'vue'
    
    import Vuex from 'vuex'
    
    Vue.use(Vuex)
    
    const store = new Vuex.Store({
        state: {
    		//公共的变量,这里的变量不能随便修改,只能通过触发mutations的方法才能改变
    	},
        mutations: {
    		//相当于同步的操作
    	},
        actions: {
    		//相当于异步的操作,不能直接改变state的值,只能通过触发mutations的方法才能改变
    	}
    })
    export default store
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在main.js中导入挂载vuex

    import Vue from 'vue'
    import App from './App'
    import store from './pages/store/index.js'
    Vue.prototype.$store = store
    
    
    Vue.config.productionTip = false
    
    App.mpType = 'app'
    
    const app = new Vue({
    	store,
        ...App
    })
    app.$mount()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2.使用

    第一种方式:this. s t o r e 直接操作例如当取值:直接在页面中使用 t h i s . store直接操作 例如当取值:直接在页面中使用this. store直接操作例如当取值:直接在页面中使用this.store.state.变量名

    第二种方法:mapState, mapGetters, mapActions, mapMutations

    <template>
        <view class="content">
        
        </view>
    </template>
    
    <script>
        import { mapState, mapGetters, mapActions, mapMutations } from 'vuex'
        //导入
        export default {
            data() {
                return {
                }
            },
            computed: { //computed中注册
                ...mapGetters(['text1']),
                ...mapState([
                    'text1'
                ])
            }
            methods: {
                ...mapMutations([]),
                ...mapActions([])
            }
        }
    </script>
    
    <style>
    </style>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    3.vuex持久化

    问题:

    H5应用中存在Vuex中的数据在刷新页面后丢失了。

    原因:

    Vuex的 store 中的数据是保存在运行内存中的,当页面刷新时,页面会重新加载 Vue 实例,Vuex数据会重新初始化,导致页面刷新Vuex中的数据丢失的问题。

    解决:

    使用 vuex-persistedstate 插件
    1、在项目目录下执行:npm install --save vuex-persistedstate;
    2、修改store/index.js

    import Vue from 'vue'
    import Vuex from 'vuex'
    import persistedState from "vuex-persistedstate"
    
    Vue.use(Vuex)
    
    const store = new Vuex.Store({
    	plugins: [
    		persistedState({
    			storage: {
    				getItem: key => uni.getStorageSync(key),
    				setItem: (key, value) => uni.setStorageSync(key, value),
    				removeItem: key => uni.removeStorageSync(key)
    			}
    		})
    	],
    	state:{//存放状态
            "username":'',
            "userid":''
        },
    	mutations:{
    		//...
    	},
    	actions:{
    		//...
    	},
    	//...
    })
    
    export default store
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    使用后浏览器打开用控制台调试可看数据存放在 window.localStorage.vuex
    这里其实就和调用uniapp提供的数据缓存API存放的数据位置一样了,官方文档链接:https://uniapp.dcloud.io/api/storage/storage.html

    注意:在APP-PLUS环境下,这个数据在应用退出时默认不会被清空(或者说初始化)。
    原文链接:https://blog.csdn.net/Mr_Bobcp/article/details/125876232

  • 相关阅读:
    QT设置QTextEdit的文本颜色无效
    独立站源码建站和模板建站如何选择?
    Qt+C++桌面计算器源码
    掌握 CocoaPods:iOS 开发的依赖管理神器,一文全攻略!
    Pinctrl子系统_02_使用Pinctrl要掌握的重要概念
    9.力扣c++刷题-->跳跃游戏
    数据库设计三范式
    第十一章 函数提高
    嵌入式开发环境之uboot
    CNN鲜花分类
  • 原文地址:https://blog.csdn.net/qq_44792224/article/details/134331239