当前位置: 首页 > 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://www.dtcms.com/wzjs/81321.html

相关文章:

  • 做网站的公司盐城上海网络公司seo
  • 安庆网站设计爱网站关键词查询工具长尾
  • 集团公司网站源码下载上海百度推广方案
  • 刚注册公司怎么做网站交换链接适用于哪些网站
  • 重庆可作为推广的网站如何屏蔽百度广告推广
  • 营业执照咨询电话24小时seo工程师是做什么的
  • 网站建设教程怎么建网站搭建的流程
  • 怎么建设销售网站推广链接怎么制作
  • wordpress和ecshop区别搜索引擎广告优化
  • 网站建设费用会计科目优化seo哪家好
  • 微网站特点品牌推广的概念
  • 网站有中文源码加英文怎么做建站系统主要包括
  • 温岭专业自适应网站建设seo简单优化
  • 网站指向错误网站排名怎么做上去
  • wordpress大学主题下载关于进一步优化落实疫情防控措施
  • php网站调试环境搭建手机网页设计
  • 鹤壁做网站湖南网络营销外包
  • 做合成照片的国外网站怎样建网站赚钱
  • 用腾讯云做淘宝客网站视频下载优化关键词具体要怎么做
  • 打开网站无反应怎么做百度联盟是什么
  • 上饶市建设局网站上海网络推广团队
  • 吉林市网站建设优化百度云盘登录
  • 深圳市手机网站建设报价关键词挖掘机爱站网
  • 网站形式的具体例子中国新闻
  • 聊城专业网站建设制作创意营销点子
  • 给公司做网站需要什么广告投放代理商加盟
  • 开发外贸产品的网站北京seo公司助力网络营销
  • 怎么查网站是哪个建站公司做的专业网站推广引流
  • 查询网站备案密码是什么集合竞价口诀背熟6句
  • 浙江网站建设实验心得北京网站建设公司哪家好