当前位置: 首页 > wzjs >正文

网站优化的目的哈尔滨做网站费用

网站优化的目的,哈尔滨做网站费用,网站服务器名字,搭建微网站平台前言 我们都知道,vuex 的使用在项目中颇为繁琐,因为它有几大概念使得它不能像普通 ref 或者 data 对象一样直接被我们使用,在我们想要更改 vuex 中的数据时,我们需要通过 mutation 来进行提交,获取 vuex 中存储的变量的…

前言

我们都知道,vuex 的使用在项目中颇为繁琐,因为它有几大概念使得它不能像普通 ref 或者 data 对象一样直接被我们使用,在我们想要更改 vuex 中的数据时,我们需要通过 mutation 来进行提交,获取 vuex 中存储的变量的时候,我们又需要通过 computed 属性来进行声明,试想,如果项目足够庞大,那么我们使用 vuex 的负担就过于重了,这违背了我们使用状态管理的本意。

问题的提出

首先,我们需要明确,我们想要怎么快捷便利地来使用 vuex ,如果你的想法和我如下所示相同,那么恭喜你,或许本文提出的解决方案适合你。

存储

对于 vuex 的存储我们想要实现的类似如下:

this.$m.vuex(name,value);

我们可以在各个组件或者视图内,通过 this 来直接使用 vuex 进行存储。

读取

对于 vuex 中数据的读取我们想要实现的类似如下:

<template>
<div>{{ vuexUser.name }}</div>
</template><script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({...methods:{// 业务方法xxxxx(){const flag = this.vuexUser.name? true : false;.....}}
})
</script>

我们能够在模板或者业务逻辑中直接通过 this 直接访问。

解决方案

首先,我们需要在 store 目录下的 index.ts 内加入如下代码

import { createStore } from 'vuex'export default createStore({state: {vuexIsLogin: false,        // 当前的登录状态vuexTestVar: "测试变量",vuexUser:{test: 1,name: "WuYunLong"}},mutations: {$changeStore(state: any, payload: any){// 判断是否为多层级调用const nameArr = payload.name.split('.');const len = nameArr.length;if ( len >= 2){let obj = state[nameArr[0]];for (let i = 1 ; i < len - 1 ; i++){obj = obj[nameArr[i]];}obj[nameArr[len-1]] = payload.value;}else {state[payload.name] = payload.value;}}}
})

之后我们在 store 目录下创建一个 ts 脚本文件,在我的项目中我命名为 maxer.mixin.ts ,在这里,我们就需要使用 Vue 中的一个特性 Mixin(混入)「不明白的同学可以去官方文档查一查,Vue3 的官方中文版已经推出了」

/*** @作者: WuYunlong* @时间: 2021/06/22* @版本: V1.0* @说明: maxer Vue 全局混入*/import { App } from 'vue'
import { mapState } from "vuex";
import store from '@/store/index.ts'// 将定义的state变量key全部加载到全局变量中
const $mStoreKey = store.state ? Object.keys(store.state) : [];
export class Maxer{vuex = (name: string, value: any): void=>{store.commit('$changeStore', {name, value})}
}export default<T> (app: App<T>) => {// 进行全局混入// 将vuex方法挂载到$m中// 使用方法为: this.$m.vuex('user.name', 'x')app.config.globalProperties.$m = new Maxer();app.mixin({computed: {// 将vuex的state中的所有变量,解构到全局混入的mixin中...mapState($mStoreKey)}})
}

在这里我们使用全局混入,将 vuex 的 state 混入到计算属性中,我们就可以通过类似 this.vuexName 来进行调用,还有一点建议就是,由于采用全局混入的模式将 vuex 中的数据进行混入,所以我们应该用特定的字符来进行标识 vuex 中的数据,我的建议是在 vuex 中变量前加上特殊前缀 ,或者类似 vuexVar:'xxx' 来进行声明变量。

之后我们就需要在 main.ts 中进行初始化了。

import { createApp } from 'vue'
import App from './App.vue'
import store from './store'
import installMaxerStore, { Maxer } from './store/maxer.mixin'
...// 声明全局组件 防止需要this调用时不能识别类型
declare module '@vue/runtime-core' {interface ComponentCustomProperties {$m: Maxer;  // 声明全局方法}
}
...
const app = createApp(App)
installMaxerStore(app)
app.use(store).mount('#app')

之后我们就可以愉快地使用 vuex 了(在注意变量命名的情况下)。

Vuex 数据持久化

这个时候或许你会发现,当页面进行刷新的时候,vuex 的数据会进行初始化(回到最初的状态),这个是由于 vuex 是运行在内存中的,同样的,它的数据也是存储在内存中,当用户进行刷新页面的操作,所以内存数据会重新进行初始化。

那么我们就可以通过 sessionStorage /localStorage/cookie 来进行数据的持久化存储。

页面加载的时候先读取域中的缓存数据,如果有则覆写。当页面将要刷新前,我们将 vuex 的数据存储到域中。

这里建议使用 sessionStorage ,对于需要长时间持久化的数据再使用 localStorage 或者 cookie。

同样我们在 store 目录下新建一个 ts 脚本。

/*** @作者: WuYunlong* @时间: 2021/6/22* @版本: V1.0* @说明: vuex数据持久化,防止F5之后数据消失*/
import {Store} from "vuex";export default<T> (store: Store<T>): void=>{// 不需要持久化的数据存入sessionStorageif (sessionStorage.getItem('store')){store.replaceState(Object.assign({},store.state,JSON.parse(sessionStorage.getItem('store') as string)));// 移除sessionStorage中的数据sessionStorage.removeItem("store");}// 页面刷新的时候进行持久化window.addEventListener('beforeunload',()=>{sessionStorage.setItem("store", JSON.stringify(store.state));})
}

对于需要长时间持久化的数据建议自行定义规则进行封装。

之后我们需要在入口文件中进行声明

import { createApp } from 'vue'
import App from './App.vue'
import store from './store'
import installMaxerStore, {Maxer} from './store/maxer.mixin'
import initStorePersistence from './store/store.persistence'
...// 声明全局组件
declare module '@vue/runtime-core' {interface ComponentCustomProperties {$m: Maxer;  // 声明全局方法}
}
...
const app = createApp(App)
installMaxerStore(app) // 全局混入vuex
initStorePersistence(store) // 初始化持久化vuex
app.use(store).mount('#app')

版权说明

本文章转载自网络,如果侵犯了您的权利起联系删除。



喜欢的朋友记得点赞、收藏、关注哦!!!


文章转载自:

http://wdrEZ961.mdLqf.cn
http://ZVlzoHnb.mdLqf.cn
http://6guUlcgz.mdLqf.cn
http://EoWHB9jo.mdLqf.cn
http://dq4YWei7.mdLqf.cn
http://OLgsp7H7.mdLqf.cn
http://YIUjiD5j.mdLqf.cn
http://F8fTywcg.mdLqf.cn
http://czXsflPK.mdLqf.cn
http://RgPqQAfl.mdLqf.cn
http://FPwAaFdd.mdLqf.cn
http://zS9c7lvb.mdLqf.cn
http://WuLZHHsL.mdLqf.cn
http://7VwToI4e.mdLqf.cn
http://wbfZ9ahr.mdLqf.cn
http://TguP1P7N.mdLqf.cn
http://34JfICgg.mdLqf.cn
http://0AUhBmMg.mdLqf.cn
http://pJStp8gQ.mdLqf.cn
http://0P5atkPQ.mdLqf.cn
http://yNKiaH92.mdLqf.cn
http://vbaQ0zwF.mdLqf.cn
http://MZ8S56rt.mdLqf.cn
http://mmFCyuL9.mdLqf.cn
http://Qxlvbrcy.mdLqf.cn
http://5taUku6b.mdLqf.cn
http://IHZN0U15.mdLqf.cn
http://CMeXgkOg.mdLqf.cn
http://Fqpvrzmk.mdLqf.cn
http://2hxGxPwh.mdLqf.cn
http://www.dtcms.com/wzjs/759972.html

相关文章:

  • 邢台专业做网站公司百度app下载安装 官方
  • 网站如何做关键词seo优化ftp备份网站
  • 百度经验网站建设西充县住房和城乡建设局网站
  • 宁德市建设银行网站phpstudy配置wordpress
  • 做网站去青鸟学什么专业苏州城乡建设局的网站首页
  • 安徽网站建设大全2010年最具人气的平面设计师必备网站
  • 外贸建站用什么平台好xampp wordpress 花生壳
  • 在哪个网站做推广比较好怎样申请微信公众平台账号
  • 微信公众号怎么做网站的网站建设焦作
  • 网站建设需求分析范例wordpress列表图片
  • 培训行业网站建设中国最火的网站
  • 成都网站空间创新互联wordpress 修改 注册
  • 设计做网站域名哪里注册
  • 定做网站多少钱wiz wordpress
  • 如何用eclipse做网站dedecms 音乐网站模板
  • 给人做违法网站规避网站建设的运营计划书
  • 郑州大型网站建设价格常州免费做网站
  • 商丘做网站建设凡客官方网店
  • 如何评价企业网站推广效果?制作网站时搜索图标如何做
  • 西安网站群搭建网站建设伍金手指下拉6
  • 做催收的网站网站建设典型经验
  • 新会网站设计个体营业执照怎么年审
  • 做58同城的网站要多少钱百度推广管家登录
  • 网站集约化建设优点美食网站联系我们怎么做
  • 优秀的店面空间设计网站wordpress 解析漏洞利用
  • 南宁网站建公司电话号码九江市区
  • 做网站不错的公司网站做ddns解析
  • 如何做自己的小说网站网站设计平台
  • 邯郸市网络建站万州电商网站建设
  • 如何建设一个博客网站企业做网站哪家便宜