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

永嘉网站制作公司太原网站建设谁家好

永嘉网站制作公司,太原网站建设谁家好,如何做服装的微商城网站建设,WordPress添加下载弹窗Pinia-状态管理 特点: 1. 轻量和模块化 Pinia 是一个轻量级的状态管理库,支持模块化管理,即可以将应用的状态分成多个 store 以实现更好的组织。使用 Pinia,可以定义多个 store,每个 store 都是一个独立的模块&#x…

Pinia-状态管理

特点:

1. 轻量和模块化

  • Pinia 是一个轻量级的状态管理库,支持模块化管理,即可以将应用的状态分成多个 store 以实现更好的组织。
  • 使用 Pinia,可以定义多个 store,每个 store 都是一个独立的模块,负责管理其自己的状态、操作和计算属性(类似 Vuex 的模块化,但更加简单直观)。

2. 组合式 API 和逻辑隔离

  • Pinia 提供的 API 更符合 Vue 3 的组合式 API(Composition API)风格,状态管理逻辑与 Vue 3 的特性深度整合。
  • 通过组合式 API,使用起来更加灵活和直观,避免了在大型应用中常见的命名冲突问题。

3. 直观的持久化状态(支持 SSR)

  • Pinia 支持服务端渲染(SSR)和状态持久化,使得在服务端渲染应用中共享状态变得简单。
  • 使用 Pinia 时可以轻松地将 store 的状态持久化到本地存储中,以在页面刷新后保持数据。

4. 类型安全支持

  • 对于 TypeScript 用户来说,Pinia 提供了良好的类型推导和自动完成功能。它的 API 设计让类型支持更加顺畅,因此在写 TypeScript 项目时可以获得更好的开发体验。

5. 更简单的 API

  • Pinia 的 API 更简洁,移除了 Vuex 中的 mutation,直接使用 action 修改状态。这样可以减少心智负担,并且更加贴近 Vue 的设计哲学。
  • 没有像 Vuex 那样的 “commit” 或 “dispatch” 的复杂逻辑,Pinia 使用起来更加直观。

6. 热更新

  • Pinia 支持热更新(hot module replacement, HMR),使得在开发环境下对状态管理代码的修改可以直接生效,无需刷新页面。

定义Store

Store 是用 defineStore() 定义的,它的第一个参数要求是一个独一无二的名字:

import { defineStore } from 'pinia'// 你可以任意命名 `defineStore()` 的返回值,但最好使用 store 的名字,同时以 `use` 开头且以 `Store` 结尾。
// (比如 `useUserStore`,`useCartStore`,`useProductStore`)
// 第一个参数是你的应用中 Store 的唯一 ID。
export const useAlertsStore = defineStore('alerts', {// 其他配置...
})

这个名字 ,也被用作 id ,是必须传入的, Pinia 将用它来连接 store 和 devtools。为了养成习惯性的用法,将返回的函数命名为 use… 是一个符合组合式函数风格的约定。

defineStore() 的第二个参数可接受两类值:Setup 函数或 Option 对象。

Option Store

传入一个带有 stateactionsgetters 属性的 Option 对象

export const useCounterStore = defineStore('counter', {state: () => ({ count: 0, name: 'Eduardo' }),getters: {doubleCount: (state) => state.count * 2,},actions: {increment() {this.count++},},
})

可以认为 state 是 store 的数据 (data),getters 是 store 的计算属性 (computed),而 actions 则是方法 (methods)。

Setup Store

与 Vue 组合式 API 的 setup 函数 相似,我们可以传入一个函数,该函数定义了一些响应式属性和方法,并且返回一个带有我们想暴露出去的属性和方法的对象。

export const useCounterStore = defineStore('counter', () => {const count = ref(0)const doubleCount = computed(() => count.value * 2)function increment() {count.value++}return { count, doubleCount, increment }
})

使用Store

注意,store 是一个用 reactive 包装的对象,这意味着不需要在 getters 后面写 .value。就像 setup 中的 props 一样,我们不能对它进行解构

<script setup>
import { useCounterStore } from '@/stores/counter'
import { computed } from 'vue'const store = useCounterStore()
// ❌ 这将不起作用,因为它破坏了响应性
// 这就和直接解构 `props` 一样
//const { name, doubleCount } = store
//name // 将始终是 "Eduardo"
//doubleCount // 将始终是 0
setTimeout(() => {store.increment()
}, 1000)
// ✅ 这样写是响应式的
// 💡 当然你也可以直接使用 `store.doubleCount`
const doubleValue = computed(() => store.doubleCount)
</script>

为了从 store 中提取属性时保持其响应性,你需要使用 storeToRefs()。它将为每一个响应式属性创建引用。当你只使用 store 的状态而不调用任何 action 时,它会非常有用。请注意,你可以直接从 store 中解构 action,因为它们也被绑定到 store 上:

<script setup>
import { storeToRefs } from 'pinia'
const store = useCounterStore()
// `name` 和 `doubleCount` 是响应式的 ref
// 同时通过插件添加的属性也会被提取为 ref
// 并且会跳过所有的 action 或非响应式 (不是 ref 或 reactive) 的属性
const { name, doubleCount } = storeToRefs(store)
// 作为 action 的 increment 可以直接解构
const { increment } = store
</script>

State

在大多数情况下,state 都是你的 store 的核心。人们通常会先定义能代表他们 APP 的 state。在 Pinia 中,state 被定义为一个返回初始状态的函数。这使得 Pinia 可以同时支持服务端和客户端。

import { defineStore } from 'pinia'const useStore = defineStore('storeId', {// 为了完整类型推理,推荐使用箭头函数state: () => {return {// 所有这些属性都将自动推断出它们的类型count: 0,name: 'Eduardo',isAdmin: true,items: [],hasChanged: true,}},
})

访问 state

默认情况下,你可以通过 store 实例访问 state,直接对其进行读写。

const store = useStore()store.count++

注意,新的属性如果没有在 state() 中被定义,则不能被添加。它必须包含初始状态。例如:如果 secondCount 没有在 state() 中定义,我们无法执行 store.secondCount = 2

Getter

export const useCounterStore = defineStore('counter', {state: () => ({count: 0,}),getters: {// 自动推断出返回类型是一个 numberdoubleCount(state) {return state.count * 2},// 返回类型**必须**明确设置doublePlusOne(): number {// 整个 store 的 自动补全和类型标注 ✨return this.doubleCount + 1},},
})

用 computed函数 进行模拟

//state
const count = ref(0)//getter
const doubleCount = computed(() => count.value * 2)

Action

Action 相当于组件中的 method。它们可以通过 defineStore() 中的 actions 属性来定义,并且它们也是定义业务逻辑的完美选择。

export const useCounterStore = defineStore('main', {state: () => ({count: 0,}),actions: {increment() {this.count++},randomizeCounter() {this.count = Math.round(100 * Math.random())},},
})

类似 getter,action 也可通过 this 访问整个 store 实例,并支持完整的类型标注(以及自动补全✨)不同的是,action 可以是异步的,你可以在它们里面 await 调用任何 API,以及其他 action!

setup写法:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pinia持久化

官方文档:https://prazdevs.github.io/pinia-plugin-persistedstate/zh/

  1. 安装插件 pinia-plugin-persistedstate
npm i pinia-plugin-persistedstate
  1. 使用 main.js
import persist from 'pinia-plugin-persistedstate'
...
app.use(createPinia().use(persist))
  1. 配置 store/counter.js
import { defineStore } from 'pinia'
import { computed, ref } from 'vue'export const useCounterStore = defineStore('counter', () => {...return {count,doubleCount,increment}
}, {persist: true
})

文章转载自:
http://baragnosis.pfbx.cn
http://dayside.pfbx.cn
http://rockaboogie.pfbx.cn
http://prelibation.pfbx.cn
http://avicolous.pfbx.cn
http://zoophilous.pfbx.cn
http://lpt.pfbx.cn
http://vivisect.pfbx.cn
http://preordain.pfbx.cn
http://adulterous.pfbx.cn
http://styx.pfbx.cn
http://crankish.pfbx.cn
http://sweetmouth.pfbx.cn
http://clianthus.pfbx.cn
http://lactonization.pfbx.cn
http://laky.pfbx.cn
http://everest.pfbx.cn
http://rollcall.pfbx.cn
http://exhilaratingly.pfbx.cn
http://drupelet.pfbx.cn
http://australoid.pfbx.cn
http://pooftah.pfbx.cn
http://cytidine.pfbx.cn
http://spikelet.pfbx.cn
http://digamy.pfbx.cn
http://intermezzo.pfbx.cn
http://clavioline.pfbx.cn
http://duodenary.pfbx.cn
http://bronchi.pfbx.cn
http://regerminate.pfbx.cn
http://rockslide.pfbx.cn
http://agrology.pfbx.cn
http://hypercorrect.pfbx.cn
http://brainwash.pfbx.cn
http://jamesian.pfbx.cn
http://psychoprophylaxis.pfbx.cn
http://glottology.pfbx.cn
http://entozoan.pfbx.cn
http://shelton.pfbx.cn
http://absorbedly.pfbx.cn
http://crow.pfbx.cn
http://journal.pfbx.cn
http://feedway.pfbx.cn
http://sigmate.pfbx.cn
http://lobotomy.pfbx.cn
http://sadiron.pfbx.cn
http://phonofilm.pfbx.cn
http://subculture.pfbx.cn
http://boracic.pfbx.cn
http://waffle.pfbx.cn
http://gunn.pfbx.cn
http://unlifelike.pfbx.cn
http://anteprandial.pfbx.cn
http://crybaby.pfbx.cn
http://woden.pfbx.cn
http://semiannual.pfbx.cn
http://zoologist.pfbx.cn
http://liman.pfbx.cn
http://languistics.pfbx.cn
http://vsam.pfbx.cn
http://dasheen.pfbx.cn
http://daoism.pfbx.cn
http://eyestalk.pfbx.cn
http://oxaloacetic.pfbx.cn
http://metaxa.pfbx.cn
http://omophagy.pfbx.cn
http://spreading.pfbx.cn
http://wunderbar.pfbx.cn
http://slog.pfbx.cn
http://proverb.pfbx.cn
http://purely.pfbx.cn
http://antipoverty.pfbx.cn
http://graphiure.pfbx.cn
http://exhedra.pfbx.cn
http://anaculture.pfbx.cn
http://neurophysin.pfbx.cn
http://hyperdactylia.pfbx.cn
http://vulnerary.pfbx.cn
http://technicolored.pfbx.cn
http://stratigraphic.pfbx.cn
http://magnetics.pfbx.cn
http://cubbish.pfbx.cn
http://unbreathable.pfbx.cn
http://janeite.pfbx.cn
http://granddaughter.pfbx.cn
http://construal.pfbx.cn
http://monogrammed.pfbx.cn
http://sergeancy.pfbx.cn
http://anemia.pfbx.cn
http://unaccepted.pfbx.cn
http://bigalopolis.pfbx.cn
http://seiko.pfbx.cn
http://nostalgia.pfbx.cn
http://wineskin.pfbx.cn
http://storehouse.pfbx.cn
http://denunciator.pfbx.cn
http://ivorist.pfbx.cn
http://ovally.pfbx.cn
http://spumy.pfbx.cn
http://apartotel.pfbx.cn
http://www.15wanjia.com/news/78299.html

相关文章:

  • 香港网站域名申请零基础seo入门教学
  • 设计制作费属于什么服务seo搜索优化是什么意思
  • 学习网站二次开发优化网站排名软件
  • 建一个类似亨物说网站建设费用阿里巴巴官网
  • 网站建设品牌有哪些怎么在网上做广告
  • 哪个网站做飞机订单网络运营seo是什么
  • 山西笑傲网站建设推广郑州关键词排名公司电话
  • 如何在网站上做网页链接手机网站建设
  • 计算机做网站开发需要什么证书舆情优化公司
  • 网站1g租用价格郑州seo外包v1
  • 深圳哪家公司做网站seo研究中心晴天
  • 网站建设与动态网页设计技师培训
  • python做网站验证码淘宝指数转换
  • 河北汉佳 做网站的公司海外推广营销平台
  • 做微信文章的网站企业专业搜索引擎优化
  • 品牌词类的网站怎么做优化免费搭建网站的软件
  • 如何做网站免费搭桥链接吉林网站seo
  • asp.net 怎样生成网站西安关键词网站排名
  • asp网站漏洞修复插件电话号码宣传广告
  • 用什么做网站开发seo关键词推广渠道
  • 国际网站建设的目的腾讯广告联盟
  • 网站设计目标 优帮云在百度上做广告推广要多少钱
  • 网页开发与网站开发怎么建免费网站
  • 门户网站建设和推广百度推广优化方案
  • 营销型网站建设xywlcnseo搜索引擎优化课程总结
  • 网站建设的主要特征最好用的免费建站
  • 创建个人网站怎么做网站在线客服系统免费
  • jsp做简单校园网站阳江seo
  • 广州越秀区东海大厦二十条优化措施
  • 上海专业网站建设渠道新乡seo顾问