pinia教程

一、创建vue3项目及安装pinia

通过vite来创建一个Vue3项目

npm init vite

填写项目名称

选择vue
在这里插入图片描述
再选择vue-ts(使用typescript语法)
在这里插入图片描述

然后跟着提示执行命令,安装依赖,运行项目在这里插入图片描述
项目启动成功:
在这里插入图片描述
安装pinia

cnpm install pinia

项目创建完成
在这里插入图片描述

二、创建store并使用数据

建议看一下官方文档pinia
1、在main.ts中引入pinia

import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'

createApp(App).use(createPinia()).mount('#app')

不喜欢这种链式的也可以进行如下改造

import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia' 

// 创建pinia 实例
const pinia = createPinia()
const app =createApp(App)
// 挂载到 Vue 根实例上
app.use(pinia)
app.mount('#app')

2、创建全局仓库store
在src下新建store -> index.ts
在这里面我们主要做这三件事

  1. 定义全局数据state
  2. 修改容器(仓库)中的 state
  3. 仓库中的 action 的使用

我们设置一个全局变量title,用它去替换欢迎界面的标题

import { defineStore } from 'pinia'

// useStore 可以是 useUser、useCart 之类的任何东西
// 第一个参数是应用程序中 store 的唯一 id
export const useStore = defineStore('main', {
    // 用来存储全局数据
    state: () => ({
        title: 'hello,welcome to pinia'
    }),
    //   用来监视或者说是计算状态的变化的,有缓存的功能。
    getters: {},
    //   对state里数据变化的业务逻辑,就是修改state全局状态数据的。
    actions: {}
})

在HelloWorld.vue文件中引入我们导出的useStore

import { useStore } from '../store/index'

声明

const store = useStore()

使用

  <h1>{{ store.title }}</h1>

成功替换
在这里插入图片描述

三、在组件中直接修改全局数据

在仓库中新增一个变量count等于零,并将其展示到HelloWorld.vue页面

	state: () => ({
        title: 'hello,welcome to pinia',
        count: 0
    }),
<h1>{{ store.title }}--{{store.count}}</h1>

在这里插入图片描述
然后在app.vue页面写一个button按钮直接改变仓库中的count值

<script setup lang="ts">
	import HelloWorld from './components/HelloWorld.vue'
	import {
	    useStore
	} from './store/index'
	const store = useStore()
	// 直接修改
	const handleClick = () => {
	    store.count++
	}
</script>

<template>
	<img alt="Vue logo" src="./assets/logo.png" />
	<HelloWorld />
	<div><button @click="handleClick">count++</button></div>
</template>

可以直接对数据仓库里面的数据进行修改,不用像vuex那么麻烦了。
请添加图片描述

四、修改仓库中数据的三种方式

第一种、跟第三节一样,直接赋值修改,适用于少量数据修改

第二种、$patch,适用于修改多条数据,并且会加快修改速度

  store.$patch({
    count: store.count + 2
  });

除了可以传入对象外还可以传入一个方法,方法的参数就是数据仓库的对应的state

	store.$patch((state)=>{
      state.count++
    })

第三种、action,适用于业务逻辑相同的时候,在数据仓库的action中定义好方法,再通过组件直接修改
先定义好方法

	actions: {
        changeCount(){
            this.count++
        }
    }

在组件中直接调用

	store.changeCount()

五、getters的使用

可以理解成vue的计算属性,具有缓存属性
在仓库中新增一个phone全局变量,然后通过getters写一个phoneHidden函数将手机号的中间四位隐藏

 	state: () => ({
        title: 'hello,welcome to pinia',
        count: 0,
        phone: '13588886789'
    }),
    //   用来监视或者说是计算状态的变化的,有缓存的功能。
    getters: {
        phoneHidden(state){
            return state.phone.toString().replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2')
        }
    },

在页面中直接调用,调用之前别忘了先引入数据仓库和声明store

<h1>{{store.phoneHidden}}</h1>

在这里插入图片描述

六、互相调用数据仓库中的值

在store文件下新建一个login.ts代码如下:

import { defineStore } from 'pinia'

export const loginStore = defineStore('login', {
    state: () => ({
       userInfo: [
         { nickName: '昵称' },
           { avatar: '头像' }
       ]
    })
})

到store->index.ts中引入,当我们改变count的时候将userInfo打印出来

	import { loginStore } from "./login";
	actions: {
        changeCount(){
            this.count++
            console.log(loginStore().userInfo)
            // this.count+=this.change()
        },
        change(){
            return 90
        }
    }

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pinia是一个用于Vue.js 3的状态管理库,它可以帮助我们更好地组织和管理应用程序的状态。在Vue.js 3中使用Pinia进行模块化状态管理有几个步骤。 首先,我们需要在项目中安装Pinia库。可以通过npm或yarn来安装Pinia。 ``` npm install pinia ``` 或 ``` yarn add pinia ``` 接下来,我们需要创建一个或多个store文件来定义我们的模块。每个store文件对应一个模块。例如,我们可以创建一个`userStore.ts`文件来管理用户相关的数据,创建一个`systemStore.ts`文件来管理系统相关的数据。 在`userStore.ts`中,我们可以定义一个`UserStore`类,该类使用Pinia的`defineStore`函数来定义模块的状态和相关的操作。在这个类中,我们可以定义我们需要的状态属性和方法。 ```typescript import { defineStore } from 'pinia' export const userStore = defineStore({ id: 'user', state: () => ({ name: '', age: 0, email: '' }), actions: { setName(name: string) { this.name = name }, setAge(age: number) { this.age = age }, setEmail(email: string) { this.email = email } } }) ``` 在`systemStore.ts`中,我们可以按照同样的方式定义系统相关的状态和操作。 接下来,我们需要创建一个根store来整合所有的模块。我们可以创建一个`store.ts`文件,使用Pinia的`createPinia`函数来创建一个根store实例。 ```typescript import { createPinia } from 'pinia' export const pinia = createPinia() ``` 最后,在我们的Vue应用程序的入口文件中,我们需要将Pinia插件添加到Vue应用程序中。 ```typescript import { createApp } from 'vue' import App from './App.vue' import { pinia } from './store' const app = createApp(App) app.use(pinia) app.mount('#app') ``` 现在,我们就可以在我们的组件中使用Pinia的`useStore`函数来获取我们定义的各个模块的实例,并使用它们的状态和操作。 ```typescript import { useStore } from 'pinia' export default { setup() { const userStore = useStore('user') // 使用userStore的状态和操作 userStore.setName('John') console.log(userStore.name) return { userStore } } } ``` 通过这种方式,我们可以将应用程序的状态按照模块进行组织和管理,使得代码更加清晰和可维护。每个模块都有自己的状态和操作,最后通过根store进行整合。这样可以更好地实现模块化管理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Vue3 - Pinia 模块化(详细教程)](https://blog.csdn.net/weixin_44198965/article/details/128114009)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [【一文搞定Pinia】超详细的Pinia教程,比Vuex香太多了!](https://blog.csdn.net/weixin_42373175/article/details/128268962)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值