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

甘肃网站定制开发开网店怎么开的

甘肃网站定制开发,开网店怎么开的,微信 网站建设,成都旅游公司哪家好文章目录 1. 介绍1.1 Pinia介绍1.2 pinia的属性说明 2. 安装3. 初步使用4. store具体使用4.1 值修改4.2.1 直接修改4.2.2 通过$patch整体修改4.2.3 通过$patch函数式4.2.4 通过$state整体修改4.2.5 通过actions修改 4.2 解构store 5 actions使用6. getters使用6.1 通过this获取… 文章目录 1. 介绍1.1 Pinia介绍1.2 pinia的属性说明 2. 安装3. 初步使用4. store具体使用4.1 值修改4.2.1 直接修改4.2.2 通过$patch整体修改4.2.3 通过$patch函数式4.2.4 通过$state整体修改4.2.5 通过actions修改 4.2 解构store 5 actions使用6. getters使用6.1 通过this获取6.2 通过state获取6.3 传参使用 7.API7.1 重置state($reset)7.2 $subscribe7.3 $onActon 8. 持久化插件8.1 插件安装8.2 使用8.3 局限性8.3.1 引用类型可能会失效8.3.2 基本数据类型之外的不会被序列化 8.4 全局配置 1. 介绍 1.1 Pinia介绍 官网地址https://pinia.vuejs.org/zh/ 主要优点 全局状态管理工具Pinia.js有以下的特点 完整的ts支持体积小只有1kb左右去除mutations只有state,getter,actionactions支持同步与异步代码扁平化没有模块嵌套只有store的概念store之间可以自由使用每个store都是独立的。无需手动添加storestore一旦创建便会自动添加支持 vue2和vue3支持插件扩展功能 什么时候可以使用 保存全局信息的时候例如登录的个人信息。 复杂的表单时比如多个步骤的表单。 1.2 pinia的属性说明 defineStore方法的第一个参数相当于为容器起一个名字。注意这里的名字必须唯一不能重复。 defineStore方法的第二个参数可以简单理解为一个配置对象里边是对容器仓库的配置。当然这种说明是以对象的形式存在。 state属性 用来存储全局的状态的属性。 getters属性用来监视或者说是计算状态的变化的有缓存的功能。 actions属性用来修改state全局状态数据的复杂的计算逻辑可以放到这里。 2. 安装 pnpm i pinia在main.ts中添加 import {createPinia} from piniaconst store createPinia() app.use(store) 3. 初步使用 1在项目的src目录下新建store文件夹 2在store文件夹里面新建store-name.ts和index.ts。 store-name用来定义枚举类型的名称作为store的唯一值。 store-name.ts #这里定义了2个枚举名称分别为USER和SYSTEM export const enum Names{USER USER,SYSTEM SYSTEM }在index.ts中, useUserStore是通过选项式类型Store useSystemStore是组合式类似的Store 引入仓库插件 import {defineStore} from pinia定义仓库1指定的唯一id是在使用时需要 这里的useXXXXXStore 是约定俗成的命名规范下面就是选项式定义仓库的方式。 export const useXXXXXStore defineStore(唯一id,{state:(){},getters:{},actions:{} }以下两种分别介绍了选项式和组合式仓库定义的具体应用针对唯一id这里抽取出来作为独立的枚举类型。 也可以不用抽取直接写但是必须所定义的字符串是唯一的 import {defineStore} from pinia import { Names } from ./store-name import {ref} from vue//options 选项式API export const useUserStore defineStore(Names.USER,{//data 类似于组件中的datastate:(){return {name: 张三,age:20}},//computed 修饰一些值getters:{},//methods 可以做同步、异步提交stateactions:{} })//setup store 组合式API export const useSystemStore defineStore(Names.SYSTEM,(){const systemInfo ref({version:win10})function getMemory(){return 16G}return {systemInfo, getMemory} }) 在vue中,分别调用2种不同store库都可以使用 script setup langts import { useUserStore, useSystemStore } from ./store const user useUserStore() const system useSystemStore() /scripttemplatedivpUser Name:{{ user.name }}/ppUser Age: {{ user.age }}/p/divdivpSystem Info: {{ system.systemInfo.version }}/ppSystem Memory: {{ system.getMemory() }}/p/div /templatestyle scoped/style页面显示如下 4. store具体使用 4.1 值修改 4.2.1 直接修改 通过点击changeName和changeAge事件可以直接修改用户的信息 在点击按钮时对应的pinia中保存的对象的值也发生改变。 4.2.2 通过$patch整体修改 //整体修改 const changeNameAndAge () {user.$patch({name: names[randomInt(0, 4)],age: user.age 1})console.log(user.name,user.age) }4.2.3 通过$patch函数式 user.$patch((state) { state.age randomInt(1,100)state.name checkName(state.age)})4.2.4 通过$state整体修改 这种方式通常需要将state中的对象全部写上否则会报错所以一般不推荐使用。 user.$state {name: 法外狂徒张三,age: 30}4.2.5 通过actions修改 修改src/store/index.ts中useUserStore中actions 然后在vue端调用: const changeNameAndAge4 (){user.setNameAndAge(张三,30) }4.2 解构store 直接解构Store中的对象时是不具有响应式的参考下图 因此为了具有响应式需要添加pinia指定的组件storeToRefs。 第一步先导入组件 import {storeToRefs} from pinia第二步在要解构的时候将store对象包裹起来 const {name,age} storeToRefs(user)5 actions使用 模拟异步登录获取student信息 第一步在store中定义异步方法getStudent //定义数据类型 type Student {name: string,grade: number }//模拟登陆时2秒后获取到student的值 const loginUser (): PromiseStudent {return new Promise((resolve) {setTimeout(() {resolve({name: 小明,grade: 3})}, 2000)}) }// 在actions中使用异步获取loginUser的数据 export const useStudentStore defineStore(student, {state: () {return {student: Student{}}},getters: {},actions: {async getStudent() {this.student await loginUser()}} })异步查询时通常都是async和await搭配一起使用的。 第二步在vue中使用 //student const studentStore useStudentStore() const getStudentInfo () {studentStore.getStudent() }studentStore可以直接调用actions里面的方法getStudent() 除此之外在actions中方法也可以互相调用。 // actions中方法互调 // 当name参数有值时就更新否则使用登陆查询的值 export const useStudentStore defineStore(student, {state: () {return {student: Student{}}},getters: {},actions: {async getStudent(name:string|null) {this.student await loginUser()this.updateStudent(name)},updateStudent(name:string|null){if(name){this.student.name name}}} })6. getters使用 6.1 通过this获取 getFullName():string {return ${this.student.name}大学${this.student.grade}年级},6.2 通过state获取 get的每个方法中都带有一个默认的state的参数可以直接使用state来获取值 getFullName2(state){return state.student.name 大学 state.student.grade 年级},6.3 传参使用 由于默认的参数是state所以要想传参需要返回一个带参数的方法提供调用就可以。 这里需要写成形式。 getFullName3: (state){return (firstName:string) firstName - state.student.name}在vue中使用时可以传入对应的firstName变量值。 pstudent fullName3: {{ studentStore.getFullName3(张姓:) }}/p7.API 7.1 重置state($reset) 重置state为初始化的状态 const resetStudentInfo () studentStore.$reset()7.2 $subscribe 当state里面的值被修改时就会触发该事件 所以当需要监听新旧的值时可以在此添加一些对应的逻辑判断。 studentStore.$subscribe((args,state){console.log(args,args)console.log(state,state) })7.3 $onActon 本身onAction是在调用到actions中的事件时触发。 studentStore.$onAction((args){args.after((){console.log(after)})console.log(onAction args,args) })但是也可以做更精细的控制就是在actions中的某个事件执行完之后再触发。 比如上面的1,2先分别调用了actions中的setStudent,updateStudent事件。 然后再分别调用了args.after这个方法。 这种可以用来处理在某个actions动作发生后添加一些处理逻辑。 8. 持久化插件 8.1 插件安装 state中的值在页面进行刷新后会丢失修改的数据所以需要借助了浏览器的存储来持久化。 安装插件 pnpm i pinia-plugin-persistedstate在main.ts中引入插件 import { createApp } from vue import ./style.css import App from ./App.vue import {createPinia} from pinia import piniaPluginPersistedstate from pinia-plugin-persistedstate //引入let app createApp(App) const pinia createPinia() app.use(pinia) pinia.use(piniaPluginPersistedstate) //使用app.mount(#app)8.2 使用 第一种简单使用直接指定开启 export const useUserStore defineStore(Names.USER, {state: () {},getters: {},actions: {},persist: true //持久化开启 })第二种: 指定自定义key export const useUserStore defineStore(Names.USER, {state: () {},getters: {},actions: {},persist: {key: my-custom-key //自定义key} })第三种组合式API方式的持久化以及制定的存储类型 export const useSystemStore defineStore(Names.SYSTEM, () {const systemInfo ref({ version: win10 })function getMemory() {return 16G}return { systemInfo, getMemory } },{ //持久化并自定义keypersist: {key: my-custom-key,storage: sessionStorage, //sessionStorage,localStorage,}} )8.3 局限性 8.3.1 引用类型可能会失效 下面这种情况b是对a的引用。因此b和a都是指向同一个地址。 const a {1: one,2: two,// ... } const b a序列化之前ab 结果是true 在持久化之后由于数据将会被序列化因此引用在刷新时将会丢失。 再次反序列化之后a和b有着相同的内容但是指向的是不同的对象。 a b 结果为false 解决方法: 采取避免 a 或 b 被持久化的方法(使用 paths 选项) 并使用 afterRestore 钩子在恢复数据后重新存储它们。 这样 a 和 b 就又会有着相同的引用两者之间的联系就恢复了。 8.3.2 基本数据类型之外的不会被序列化 解决方法: 使用 afterRestore 钩子在恢复数据后重新创建对象。 使用自定义的 serializer 来配置你想要持久化的数据类型。 8.4 全局配置 使用createPersistedState来进行全局配置。 import { createApp } from vue import ./style.css import App from ./App.vue import {createPinia} from pinia // import piniaPluginPersistedstate from pinia-plugin-persistedstate import { createPersistedState } from pinia-plugin-persistedstatelet app createApp(App) const pinia createPinia() app.use(pinia) // pinia.use(piniaPluginPersistedstate)pinia.use(createPersistedState({storage: sessionStorage,key: id __persisted__${id},auto: true,}) )全局配置以后可以不需要在每个store中再额外配置但是可以指定的store中禁用持久化。 import { defineStore } from pinia defineStore(not-persisted, {state: () ({ saved: }),persist: false, //显示指定某个store不持久化 })也可以为单独的state中变量分别指定持久化方式: import { defineStore } from pinia defineStore(store, {state: () ({toLocal: ,toSession: ,toNowhere: ,}),persist: [{paths: [toLocal],storage: localStorage,},{paths: [toSession],storage: sessionStorage,},], })
http://wiki.neutronadmin.com/news/125741/

相关文章:

  • 网站推广阶段icp备案和网站不符
  • 长沙网站建设长沙给娃娃做衣服卖的网站
  • 模版建网站网页设计公司企业组织结构图
  • 上海市住房和城乡建设网站重庆招聘网站哪个好
  • 淮安市哪里可以做网站360网页怎么制作
  • 深圳公司网站如何设计网站做排名有用吗
  • 怎样建设影视网站网站开发过程中遇到的问题及解决办法
  • 网站制作出租网站首页分辨率
  • 比比西旅游网站建设seo快速排名关键词
  • wordpress网站模版北京高档网站建设
  • 门户网站建设意义wordpress 前台空白
  • 苏州公司网站建设找哪家广州网站建设联享科技
  • 学校校园网站建设必要性设计公司简介ppt范本
  • 网站开发文本模版建筑营销型网站
  • 外贸自建站多少钱医院网站建设存在问题
  • 东莞网站开发多少钱中山市企业网站建设
  • 只做衬衣网站襄阳网站seo诊断
  • 学做效果图网站有哪些软件有哪些网上购物管理系统设计与实现
  • 成都酒店网站建设做网站设计工资多少钱
  • 网上书城网站开发的目的与意毕业设计 建设旅游网站
  • 庆阳网站哪里做我国省级档案网站建设状况
  • 无锡网站建设选众鼎问答类咨询网站的建设
  • 活动策划网站有哪些泰安市齐鲁人才网
  • 国外 上海网站建设织梦软件展示网站
  • 网站建设过程规划appstore关键词优化
  • 网站开发有哪些技术wordpress 爬虫
  • wordpress 微网站盐田区住房和建设局网站
  • 做网站怎么防止被网警查到适合35岁女人的培训班
  • 兰州企业网站排名优化电子硬件工程师培训机构
  • 台州平台网站建设微信开发者工具官网下载电脑版