Vue3 状态管理器大菠萝 Pinia 学习使用笔记

在这里插入图片描述

先来一张大菠萝 🍍 Pinia 美照😄镇楼。

Pinia 是什么?

按照官方的介绍:

Pinia最初是在 2019 年 11 月左右重新设计适用于Vue3组合式API的状态管理库

目前 Vuex 最新版本是 v4.0.2,Pinia 可以说是 Vuex 的升级版(个人理解为 vuex 5.x 版本),尤雨溪强势推荐

Pinia相对Vuex 优化了什么

  1. Vue2 和 Vue3 都能支持
  2. 相比较Vuex放弃 Mutation ,只保留 state, getter 和 action ,简化状态管理库
  3. 支持 Vue3 的 Composition api
  4. 为 JS 用户提供适当的 TypeScript 支持
  5. 可以自己写一些插件对Pinia进行扩展
  6. 支持服务器端渲染

安装

pinia使用您最喜欢的包管理器安装:

yarn add pinia
# or with npm
npm install pinia

创建第一个store仓库

1、在src目录下创建store目录
2、创建一个 PiniaTest.ts 的文件(文件名可以根据自己需求来)

import {defineStore} from 'pinia'

// 使用 defineStore 定义一个仓库,
// 组件中需要引入仓库,并使用useStorePinia 进行实例化 
// main 是仓库唯一的ID,可以根据自己的需求定义
export const useStorePinia = defineStore('main', {
     // 闭包
    state () {
        return {
        	// 所有这些属性都将自动推断其类型
            msg: 'hello word',
            count: 10,
            content: '这是通过getters获取Pinia管理的仓库数据'
        }
    },
    // 推荐用于完整类型推断的箭头函数
    // state: () => {
	//   return {
	//         // 所有这些属性都将自动推断其类型
	//           msg: 'hello word',
	//           count: 10,
	//           content: '这是通过getters获取Pinia管理的仓库数据'
	//   }
	// },
    // 简写方式
    // state: () => ({
    //    msg: 'hello word',
    //    count: 10
    // }),
    getters:{
        getMsgFn(){
            return this.content
        }
    },
    actions:{
    	// actions 里面可以执行同步和异步任务
    	// 也可以接收外部传递进来的参数
    	// 可以直接修改仓库的值,此处不能使用箭头函数,否则找不到this,打印显示 undefined
        changeMsg (val) {
            console.log('传入进来的值:', val)
            this.msg = '1111'
            this.count == val;
        }
    }
})

引入并使用步骤

  1. 在 main.js 里面引入pinia
  2. 使用 createPinia 进行实例化
  3. 挂载到Vue身上(实际上是将插件进行注册,给放到已经注册的插件数组列表中)
import { createApp } from 'vue'
// 引入inia
import {createPinia} from 'pinia'
import App from './App.vue'

console.log('createPinia:', createPinia);

// 创建实例
const pinia = createPinia();

console.log('pinia:', pinia);

// 使用插件
createApp(App).use(pinia).mount('#app')

Pinia在组价中的使用

<template>
    <div style="background: pink;padding: 10px;margin: 10px 0;">
        <div>组件11111111111</div>
        <div>仓库数据:{{count}}---{{getMsgFn}}</div>
        <button @click="changeStoreCountFn">点击</button>
    </div>
</template>

<script setup>
import {defineProps} from 'vue';
import { storeToRefs } from "pinia";

// 引入仓库
import {useStorePinia} from '../Store/PiniaTest'

// 此处 defineStore 与仓库名一样
const store = useStorePinia();


// 此处不能直接使用解构,这样会破坏数据的响应式,这里与使用 props 是一个道理,但是定义的函数是可以解构的
// 如果需要保留响应式,需要使用 storeToRefs() ,将为每个属性创建引用

const {changeMsg, getMsgFn} = store; // getMsgFn // 始终会是 '这是通过getters获取Pinia管理的仓库数据'

// 只有强转ref后数据才是响应式的
const {msg, count} = storeToRefs(store);
console.log(11111, store,storeToRefs(store), msg, count)


// 修改仓库count值
const changeStoreCountFn = () => {

    // 方式 1、通过触发仓库 actions 中定义的函数执行
    changeMsg(++count.value)
    console.log(2222,getMsgFn)


    // 方式 2、读取仓库数据进行修改
    // count.value++
    // msg.value = 'aaaaaa'


    // 方式 3、对象形式修改仓库数据
    // store.$patch({
    //     msg: 'change word',
    //     count: ++count.value
    // })


    // 方式 4、函数形式修改仓库数据
    // store.$patch((state) =>{
    //     state.msg = 'change word';
    //     state.count++
    // })
}
</script>

效果展示
在这里插入图片描述

拓展

Setup Function 定义仓库

除了上面 Options 方式创建仓库的方式以外,我们还可以用另外一种语法来定义仓库,类似于Vue composition API 的 setup functin可以定一个响应式属性和方法的函数,并返回一个带有属性和我们要公开的函数方法
具体的创建方式如下示例。

import {computed, ref, reactive} from 'vue';
import { defineStore } from 'pinia';

// 你可以为`defineStore()`的返回值命名任何你想要的名字,
// 但最好使用商店的名称并用`use`和`Store`包围它, 当然也可以不采用,不过这是一个习惯问题,不作强求
//(例如`useUserStore`、`useCartStore`、`useProductStore` )
// 第一个参数是创建的仓库中唯一的ID

export const useUserStore = defineStore('user', () => {
	const count = ref(0);
	const userInfosObj = reactive({
		name: '张三',
		age: 18,
	});

	const COUNT = computed(() => count.value * 2);
	
	const resetCountFn = () => {
		count.value = 0;
	};

	return { count,COUNT , userInfosObj, resetCountFn }

})

Setup Stores 中:

  • ref()reactive() 成为 state 的仓库属性
  • computed() 变成 getters
  • function() 变成 actions

这种设置方式相比较Options Stores的方式更加的灵活,可以在仓库中创建观察者并自由的使用。但是,如果在 SSR 中使用时,组合式创建仓库会变得很复杂不好维护

如果在使用的时候对两种方式有些摇摆不定,那么建议使用 Options 方式创建仓库。

重置状态
  • Options Stores 中,可以通过 $reseat() 方法将状态重置为初始值。

    const store = useStore()
    
    store.$reset()
    
  • SetupStores 中,需要自己定义 $reseat() 方法。

    export const useCounterStore = defineStore('counter', () => {
      const count = ref(0)
    
      function $reset() {
        count.value = 0
      }
    
      return { count, $reset }
    })
    
改变状态
  • 使用 store.count++

    const store = useStore()
    store.count++
    
  • 使用 store.$patch({})

    const store = useStore()
    
    // 使用这种方式,例如集合修改会有些困难或者代价高昂
    store.$patch({
      	name: '张三',
    	age: 18,
    	subject: []
    })
    
  • 使用 store.$patch(() => {})

    const store = useStore()
    store.$patch((state) => {
      state.subject.push({ name: '语文', quantity: 1 })
      state.age= 19
    })
    

这里的主要区别是 $patch() 允许您将多个更改分组到开发工具中的一个条目中。 注意两者,state$patch() 的直接更改都出现在 devtools 中,并且可以进行时间旅行(在 Vue 3 中还没有)。

<think>好的,用户想知道如何在Word中将英文小写字母转换为大写。首先,我需要回忆一下自己知道的Word功能。常用的方法可能有使用快捷键,或者通过菜单栏的字体设置来更改大小写。对了,我记得Shift+F3这个快捷键可以在不同的大小写格式之间切换,比如全大写、全小写或者首字母大写。这个应该适用于选中的文本。 另外,用户可能需要更详细的操作步骤。比如,在菜单栏中找到“开始”选项卡,然后点击“字体”组里的“更改大小写”按钮,选择“大写”选项。这种方法对于不熟悉快捷键的用户来说更直观。还有,如果用户需要批量处理多个段落或整个文档,可能需要使用查找和替换功能,或者编写宏来自动化操作。不过根据用户提供的引用,他们可能对VBA宏比较感兴趣,因为引用[3]提到了用VBA创建宏来处理金额转换。虽然问题不是关于数字而是英文大小写,但也许可以建议使用宏来处理更复杂的转换需求。 需要注意用户是否提到了具体的Word版本,但问题中没有说明,所以需要给出通用方法,适用于大多数版本。同时,检查是否有其他方法,比如使用Word的公式功能或者插件,但常见的方法还是上述几种。还要确保步骤清晰,避免遗漏关键点,比如选中文本后再操作。另外,提醒用户注意全角半角的问题,但可能用户只是简单转换,不需要涉及这些细节。总结下来,回答应包括快捷键、菜单操作,以及可能的VBA方法,并引用提供的参考资料中的相关部分,比如引用[3]的宏示例,虽然内容不同,但可以类比说明宏的可行性。</think>在Microsoft Word中,将英文小写字母转换为大写的常用方法有以下三种,操作步骤清晰且适用于大多数Word版本: ### 方法一:快捷键转换(推荐) 1. 选中需要转换的英文文本 2. 按下组合键$Shift+F3$ 3. 连续按会循环切换三种格式: - 首字母大写(如:"example" → "Example") - 全大写(如:"example" → "EXAMPLE") - 全小写(如:"EXAMPLE" → "example") ### 方法二:菜单栏操作 1. 选中目标文本 2. 点击「开始」选项卡 →「字体」组中的「更改大小写」按钮(Aa图标) 3. 在下拉菜单中选择「大写」 ### 方法三:VBA宏批量转换(适合批量处理) 1. 按$Alt+F11$打开VBA编辑器 2. 插入新模块并粘贴以下代码: ```vba Sub ConvertToUpperCase() Selection.Range.Case = wdUpperCase End Sub ``` 3. 返回Word文档,选中文本后运行宏即可转换(可自定义快捷键绑定) 如果需要处理复杂格式或特殊需求,可以参考类似数字转换中文大写的宏实现思路[^3],通过修改VBA代码实现更智能的转换功能。对于常规使用,前两种方法已足够高效,快捷键转换效率最佳,处理500字文档仅需3秒即可完成格式转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值