vue3学习day04-provide和inject、defineOptions、defineModel、Pinia、pinia持久化

15、provide和inject

(1)作用:顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信

(2)语法:

        1)顶层组件通过provide函数提供数据
        2)底层函数提供inject获取数据

(3)示例1:

初始:

1)在父组件内

①导入provide

②提供传递的数据(provide(属性名,属性名对应的内容))

2)在孙组件内

①导入inject

②接收

3)渲染

4)效果:

(4)示例2(修改数据)

已知:

 

1)在父组件内提供修改方法

2)孙组件接收

3)孙组件使用

4)效果

16、 defineOptions

(1)作用:定义任意选项(props、emits、expose、slots除外),解决<script setup>占  满script标签,无法添加与setup平级的属性。

(2)语法:

已知在views文件夹下的login中有一index.vue文件

命名时出现两个script,无法新增name属性

解决(defineOptions({})):

17、defineModel

(1)作用:简化代码(vue3支持v-model,但是v-model相当于传递一个modelValue属性,并触发update-modelValue事件,代码繁冗)

(2)语法

已知(父组件绑定了一个数据):

1)导入defineModel

2)声明

3)在vite.config.js中配置

4)使用

5)效果:

18、Pinia

(1)概念:vue的状态管理工具,vuex的替代品

(2)优点:

        1)提供更加简单的API(去掉了mutations)
(由state、mutations、actions、getters、modules——>state、actions、getters)
        2)提供符合组合式风格的API
        3)去掉了modules概念,每一个仓库(store)都是一个独立的模块
        4)对TypeScript更加友好,提供可靠的类型推断。

(3)语法

        1)创建一个空的vue3项目(npm create vue@latest)

执行以下命令,启动项目

        2)通过VsCode打开项目,清除不必要文件(components、assets)和数据(App.vue和main.js中)

        3)准备组件使组件呈现以下效果

4)配置pinia
        ①找到官方文档(https://cn.vuejs.org/),点击开始使用,找到“安装”,点击“开始”

        

        ②安装pinia(yarn add pinia或npm install pinia)

        ③在main.js中,导入、创建、挂载

        ④重启项目,不报错即可

        5)pinia使用
                ①创建仓库

        创建仓库——导入

        创建仓库——定义仓库

        

        创建仓库——提供数据

        

        创建仓库——返回

        

创建仓库——导出

        

②使用

③效果

(4)处理安装报错

1) 尝试调用 import_node_util.parseArgs 这个函数时出现了问题,因为 parseArgs 并不是一个有效的函数或者没有被正确地导出。问题原因(依赖问题、导入错误、构建问题

我的这里是亿依赖问题,node版本不匹配(现在使用的是node的16.8.0)

解决步骤:
①查看node版本

②使用nvm查看现在有几个node版本

③切换版本

④再次查看node版本

(5)pinia的属性

        1)getters(通过computed实现)
                ①使用(在创建仓库的js文件中新提供一个借助computed实现的函数,通过变量接收)

                ②导入、接收、调用

                ③效果

        

2)actions异步
①自定义一个接口并启动接口,接口内容如下

②安装axios

③新建仓库,进行异步请求,提供数据

④使用

⑤效果

3)storeToRefs
①作用:解决解构仓库得到的数据由响应式变为非响应式的问题,即解构数据时需要加storeToRefs,解构方法不需要加storeToRefs

 

②语法示例:

已知:

使用:

效果:

19、pinia持久化

(1)安装pinia持久化插件

①打开官网(https://prazdevs.github.io/pinia-plugin-persistedstate/zh/),点击“开始使用”

②在vscode的package查看pinia版本,确定版本高于pinia^2.0.0

③安装依赖(npm i pinia-plugin-persistedstate)

④将插件安装到pinia实例上(在main.js)

⑤使用(创建 Store 时,将 persist 选项设置为 true)(在第三个参数的位置)

⑥效果(增加后,刷新,数值不变)(若未实现,可以试试重启)

在本地存储,可看到

(2)插件内部的修改

1)在本地存储的id名

(在需要修改id,避免id重复的地方使用persist修改)

2)paths(用于指定 state 中哪些数据需要被持久化。[] 表示不持久化任何状态,undefined 或 null 表示持久化整个 state)

在原js文件,新增一个msg,发现它也会持久化

指定num才可持久化:

  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue 3中,`pinia-plugin-persistedstate`是一个用于持久化状态的Pinia插件,它允许你在用户关闭和重新打开应用时保存和恢复数据。关于设置Pinia状态的时效,你需要明确你是指的状态持久化的时间范围,例如: 1. **默认保存间隔**:这个插件通常会自动保存状态到浏览器的localStorage或 sessionStorage中。默认情况下,Pinia-PersistedState可能没有特定的保存间隔,但你可以通过配置自定义保存策略。 2. **手动触发保存**:你可以选择在特定场景(如组件卸载或页面刷新前)调用保存方法,这可以让你控制保存的时机。 3. **失效时间**:对于敏感信息,你可能希望设置一个过期时间,超过这个时间后数据会被清除。这通常不是由Pinia-PersistedState直接处理,而是通过在存储选项中设置`maxAge`属性来实现,然后在加载数据时检查是否已过期。 为了具体设置pinia状态的时效,你需要在配置插件时进行以下操作: ```javascript import { createApp } from 'vue'; import { useStore } from '@pinia/core'; import { persistedState } from 'pinia-plugin-persistedstate'; const store = defineStore('myStore', { // ...定义你的状态和方法 }); // 使用 persistedState 插件 createApp({ // ...其他配置 }) .use(store) .use(persistedState, { key: 'myStore', // 存储的键名 // 可选的保存策略,如自动保存间隔、过期时间等 // 例如: // localStorage: { maxAge: 24 * 60 * 60 * 1000 }, // 一天后数据过期 }); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值