【Vue3】Pinia存储及读取数据
- 背景
- 简介
- 开发环境
- 开发步骤及源码
背景
随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本文内容并非完全原创,大多是参考其他文章资料整理所得,感谢每位技术人的开源精神。
简介
本文介绍 Vue3 中如何使用 Pinia 存储和读取数据。
Pinia 是 Vue 专属的状态管理库,允许跨组件或页面共享数据。
开发环境
分类 | 名称 | 版本 |
---|---|---|
操作系统 | Windows | Windows 11 |
IDE | Visual Studio Code | 1.91.1 |
开发步骤及源码
1> 创建 Vue3 工程,参考:【Vue3】工程创建及目录说明。
2> 执行 npm i pinia
命令安装 Pinia。
PS D:\...> npm i pinia
added 3 packages in 10s
12 packages are looking for funding
run `npm fund` for details
3> 修改 src
目录下 main.ts
,引入 Pinia。
import { createApp } from 'vue'
import App from './App.vue'
// 引入
import { createPinia } from 'pinia'
createApp(App)
// 创建并使用
.use(createPinia())
.mount('#app')
4> 在 src
目录下创建 store
目录,并在此目录中创建一个 book.ts
,用于集中存储书籍数据。
import { defineStore } from "pinia"
export const useBookStore = defineStore('book', {
// state 必须写成函数形式,返回的对象即是集中存储的数据
state() {
return {
bookCount: 5,
books: [
{ id: '001', title: '坐天下', author: '张宏杰' },
{ id: '002', title: '明朝那些事儿', author: '当年明月' },
{ id: '003', title: '太白金星有点烦', author: '马伯庸' },
{ id: '004', title: '活着', author: '余华' },
{ id: '005', title: '饥饿的盛世', author: '张宏杰' },
]
}
}
})
注意命名规范 useXxxStore
,其中前缀 use
和后缀 Store
是固定的。
5> 新建一个功能组件读取并展示 Pinia 中数据。
<template>
<div class="books">
<h2>图书数量:{{ bookStore.bookCount }}</h2>
<h2>图书列表</h2>
<ul>
<li v-for="book in bookStore.books" :key="book.id">
{{ book.title }} -- {{ book.author }}
</li>
</ul>
</div>
</template>
<script setup lang="ts">
import { useBookStore } from '@/store/book'
const bookStore = useBookStore()
</script>
<style scoped lang="scss">
.books {
background-color: aquamarine;
padding: 20px;
li {
font-size: 20px;
height: 35px;
line-height: 35px;
}
}
</style>
注意:需要执行 npm install -D sass
命令安装 CSS 预处理器。
6> 修改 Vue 根组件 src/App.vue
,引入以上组件。
<template>
<div class="content">
<Book />
</div>
</template>
<script setup lang="ts">
import Book from './components/Book.vue'
</script>
<style scoped lang="scss">
.content {
background-color: darkgray;
padding: 20px;
}
</style>
7> 执行命令 npm run dev
启动应用,浏览器访问:http://localhost:5173/
。