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

安徽网站建设论坛北京专业做网站

安徽网站建设论坛,北京专业做网站,自己做视频网站怎么处理高并发,免费seo关键词优化排名前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 文章目录Pinia 核心知识详解:Vue3 新一代状态管理指南引言:为什么选择 Pinia?Pinia 核心概念图解1. 安…

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

文章目录

  • Pinia 核心知识详解:Vue3 新一代状态管理指南
    • 引言:为什么选择 Pinia?
    • Pinia 核心概念图解
    • 1. 安装与基本使用
      • 安装 Pinia
      • 创建 Pinia 实例
    • 2. 定义 Store
      • 基本 Store 示例
    • 3. 在组件中使用 Store
      • 选项式 API 中使用
      • 组合式 API 中使用(推荐)
    • 4. 核心概念详解
      • State:存储状态数据
      • Getters:计算派生状态
      • Actions:操作方法
    • 5. Pinia 高级特性
      • 模块化设计
      • Store 间相互调用
      • 插件系统
    • Pinia vs Vuex 对比表
    • 最佳实践
    • 常见问题解答
    • 总结

在这里插入图片描述

Pinia 核心知识详解:Vue3 新一代状态管理指南

引言:为什么选择 Pinia?

想象你正在开发一个 Vue3 应用,随着功能增加,组件之间的状态共享变得越来越复杂。这时你需要一个状态管理工具,但 Vuex 的繁琐写法让你望而却步。Pinia 就是为此而生的!它是 Vue 官方推荐的新一代状态管理库,相比 Vuex 具有以下优势:

  • 🚀 更简单的 API - 去掉 mutations,减少模板代码
  • 🛠 TypeScript 支持 - 完美的类型推断
  • 🔥 组合式 API 风格 - 与 Vue3 完美契合
  • 📦 轻量级 - 只有 1KB 大小
  • 模块化设计 - 自动代码分割

Pinia 核心概念图解

┌─────────────┐       ┌─────────────┐
│  组件调用    │        │   直接调用   │
│  State      │──────▶│   Actions   │
└─────────────┘       └─────────────┘▲                      ││                      │└──────────────────────┘│▼┌─────────────┐│   Getters   │└─────────────┘

1. 安装与基本使用

安装 Pinia

npm install pinia
# 或
yarn add pinia

创建 Pinia 实例

// main.js
import { createApp } from 'vue'
import { createPinia } from 'pinia' // 导入Pinia
import App from './App.vue'const pinia = createPinia() // 创建Pinia实例
const app = createApp(App)app.use(pinia) // 使用Pinia
app.mount('#app')

2. 定义 Store

Pinia 使用 defineStore 函数定义 store,每个 store 就像一个独立的模块。

基本 Store 示例

// stores/counter.js
import { defineStore } from 'pinia'// 定义并导出counterStore
// 第一个参数是store的唯一ID
export const useCounterStore = defineStore('counter', {// State:相当于组件中的datastate: () => ({count: 0,user: {name: '张三',age: 25}}),// Getters:相当于组件中的computedgetters: {doubleCount: (state) => state.count * 2,// 使用其他getterdoubleCountPlusOne(): number {return this.doubleCount + 1}},// Actions:相当于组件中的methodsactions: {increment() {this.count++ // 直接通过this访问state},async fetchUser(userId) {const response = await fetch(`/api/users/${userId}`)this.user = await response.json()}}
})

3. 在组件中使用 Store

选项式 API 中使用

<script>
import { useCounterStore } from '@/stores/counter'export default {setup() {const counter = useCounterStore()return { counter }},computed: {// 访问statecount() {return this.counter.count},// 访问getterdoubleCount() {return this.counter.doubleCount}},methods: {// 调用actionincrement() {this.counter.increment()}}
}
</script>

组合式 API 中使用(推荐)

<script setup>
import { useCounterStore } from '@/stores/counter'
import { computed } from 'vue'const counter = useCounterStore()// 直接修改state(不推荐)
function directChange() {counter.count++
}// 使用action修改state(推荐)
function actionChange() {counter.increment()
}// 使用storeToRefs保持响应式
import { storeToRefs } from 'pinia'
const { count, doubleCount } = storeToRefs(counter)
</script><template><div>Count: {{ count }}</div><div>Double: {{ doubleCount }}</div><button @click="actionChange">Increment</button>
</template>

4. 核心概念详解

State:存储状态数据

state: () => ({count: 0,user: null,items: []
}),

特点:

  • 必须是一个函数,返回初始状态对象
  • 类似组件的 data()
  • 直接通过 store.xxx 访问

Getters:计算派生状态

getters: {// 基本getteritemCount: (state) => state.items.length,// 使用this访问其他getterexpensiveItems(): Item[] {return this.items.filter(item => item.price > 100)},// 带参数的gettergetItemById: (state) => (id) => {return state.items.find(item => item.id === id)}
}

特点:

  • 类似组件的 computed
  • 可以通过 this 访问整个 store 实例
  • 支持返回函数实现带参数的 getter

Actions:操作方法

actions: {// 同步actionaddItem(item) {this.items.push(item) // 直接修改state},// 异步actionasync fetchItems() {try {const response = await fetch('/api/items')this.items = await response.json()} catch (error) {console.error('加载失败:', error)}},// 使用其他actionasync resetAndFetch() {this.reset() // 调用另一个actionawait this.fetchItems()},reset() {this.items = []}
}

特点:

  • 类似组件的 methods
  • 可以是同步或异步
  • 通过 this 访问整个 store
  • 可以直接修改 state(不需要 mutations)

5. Pinia 高级特性

模块化设计

Pinia 天然支持模块化,每个 store 都是一个独立模块:

stores/
├─ user.js       # userStore
├─ cart.js       # cartStore
└─ product.js    # productStore

Store 间相互调用

// stores/user.js
export const useUserStore = defineStore('user', {state: () => ({ name: '' }),actions: {login() { /* ... */ }}
})// stores/cart.js
export const useCartStore = defineStore('cart', {actions: {checkout() {const userStore = useUserStore()if (!userStore.name) {userStore.login()}// 结账逻辑...}}
})

插件系统

可以创建 Pinia 插件来扩展功能:

// 创建一个持久化插件
const persistPlugin = ({ store }) => {// 从localStorage恢复状态const savedState = localStorage.getItem(store.$id)if (savedState) {store.$patch(JSON.parse(savedState))}// 订阅状态变化store.$subscribe((mutation, state) => {localStorage.setItem(store.$id, JSON.stringify(state))})
}// 使用插件
const pinia = createPinia()
pinia.use(persistPlugin)

Pinia vs Vuex 对比表

特性PiniaVuex
Vue 版本支持Vue 2 & 3Vue 2 & 3
学习曲线简单中等
TypeScript完美支持需要额外配置
核心概念State/Getters/ActionsState/Getters/Mutations/Actions
模块化每个store自动模块化需要手动分模块
代码量更简洁相对繁琐
官方推荐Vue3推荐Vue2主流

最佳实践

  1. 命名规范

    • Store 文件:use[Name]Store 格式(如 useUserStore
    • Store ID:与文件名一致的小写(如 'user'
  2. 结构组织

    src/
    └─ stores/├─ index.js      # 导出所有store├─ user.js       # 用户相关状态├─ cart.js       # 购物车状态└─ product.js    # 产品状态
    
  3. 状态更新

    • 小量更新:直接赋值 store.count++
    • 批量更新:使用 $patch
      cartStore.$patch({items: [...cartStore.items, newItem],lastUpdated: new Date()
      })
      
  4. 响应式解构

    import { storeToRefs } from 'pinia'const userStore = useUserStore()
    // ❌ 会失去响应性
    const { name, email } = userStore// ✅ 保持响应性
    const { name, email } = storeToRefs(userStore)
    

常见问题解答

Q: 什么时候该用 Pinia?
A: 当你使用 Vue3 开发中大型应用,需要共享状态时。小型应用可以使用 provide/injectprops/emits

Q: Pinia 需要替换 Vuex 吗?
A: 新项目建议直接使用 Pinia。已有 Vuex 项目如果运行良好,不必强制迁移。

Q: 如何重置 store 状态?
A: 调用 store 的 $reset() 方法:

const store = useStore()
store.$reset() // 重置为初始状态

Q: 如何监听状态变化?
A: 使用 $subscribe

cartStore.$subscribe((mutation, state) => {console.log('状态变化:', mutation.type, state)
})

总结

Pinia 作为 Vue3 的轻量级状态管理解决方案,通过简化概念(去掉了 mutations)和提供组合式 API 风格,让状态管理变得更加简单高效。核心要点:

  1. defineStore - 定义状态容器
  2. state - 存储响应式数据
  3. getters - 计算派生状态
  4. actions - 定义业务逻辑
  5. 模块化 - 天然支持代码分割

记住 Pinia 的三步使用法:

  1. 创建defineStore 定义 store
  2. 使用useXxxStore() 在组件中获取 store
  3. 操作:直接访问/修改 state 或调用 actions

Pinia 的简洁设计和完美 TypeScript 支持,让它成为 Vue3 项目状态管理的首选方案。现在就开始使用 Pinia,享受更流畅的开发体验吧!

http://www.dtcms.com/a/436341.html

相关文章:

  • 淘宝京东网站建设目的哈尔滨专业的建站报价
  • 做网站的都是什么专业毕业的公司网站建设外包流程图
  • 做夹具需要知道的几个网站保定网站电话
  • 公司做企业网站须知赣州网站建设顺企网
  • php 网站模板目前网站建设用哪种语言
  • 河南网站网站制作军事人才招聘网官网2023岗位表
  • 做网站前期构架图成都住建局官网投诉
  • LeetCode 刷题【96. 不同的二叉搜索树】
  • 响应式的网站建设一个多少钱流量平台当建价值高地
  • 万网网站备案流程百度发布平台官网
  • 网站内容页相关性怎么做自助建站网站模板
  • 阜阳 做网站用手机怎样免费做网站
  • 招聘网站建设规划书自己可以建设环保公益网站吗
  • 建设银行河北招聘网站记账公司
  • 免费 网站管理系统360报危险网站
  • 【最新】2025年计算机软件著作权合作开发协议示例文件
  • Scade One 图形建模 - 算术算符
  • 数据集网站网站管理
  • 百度收录正常网站流量下降石家庄seo推广
  • asp网站作业下载网站在线统计代码
  • 保安公司网站如何做象山网站建设
  • 英语学习-Saints036
  • 淘客网站开发公司青岛网络公司有哪些
  • php网站开发需要多久做网站都需要哪些费用
  • 石家庄建站外贸网站上海新闻最新消息
  • Mysql速成笔记1(DDL)
  • ps做 网站标准尺寸是多少网站域名使用怎么做待摊分录
  • 如何做好网站建设工作学校网站建设阶段性目标
  • 北京网站建设yi wl什么行业需要做网站
  • 恒网做的网站wordpress邮件设置密码