iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Pinia怎么实现简单的用户状态管理
  • 722
分享到

Pinia怎么实现简单的用户状态管理

2023-07-04 16:07:43 722人浏览 泡泡鱼
摘要

这篇“Pinia怎么实现简单的用户状态管理”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Pinia怎么实现简单的用户状态管理

这篇“Pinia怎么实现简单的用户状态管理”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Pinia怎么实现简单的用户状态管理”文章吧。

    Store是什么?

    全局状态,用于在所有组件中,同步数据。

    Store的应用场景?

    在整个应用程序中访问的数据(且不需要被持久化),例如导航栏中显示的用户信息,以及需要通过页面保留的数据,例如一个非常复杂的多步骤表格。

    pinia是什么?

    简单一句介绍,Vuex的升级版,抛弃了烦人的Mutation。

    其他优点

    • action支持同步和异步;

    • 良好的typescript支持;

    • 支持用插件扩展功能;

    • 扁平架构,没有嵌套;

    • 服务端渲染支持。

    应用示例

    下面我们以一个管理平台的员工账号信息为例,展示Pinia的使用方式。

    本文作者认为setup是更好的组织代码的方式,所以都用setup编写下面的示例。

    安装和挂载部分,直接看文档。

    定义Store

    import { defineStore } from 'pinia'// 第一个参数是应用程序中 store 的唯一 idexport const useUserStore = defineStore('user', {  // other options...})

    使用Store

    import { useUserStore } from '@/stores/user'export default {  setup() {    const userStore = useUserStore()    return {      // 您可以返回整个 store 实例以在模板中使用它      userStore,    }  },}

    (如果习惯用选项式api,还是可以配合map helpers,声明各种map来访问store。)

    获取store的响应式数据

    直接解构会破坏响应式,需要用storeToRefs()提取属性并保持响应式。

    import { storeToRefs } from 'pinia'export default defineComponent({  setup() {    const userStore = useUserStore()    // ❌ 这不起作用,因为它会破坏响应式    // 这和从 props 解构是一样的    const { userName } = userStore        // 这样可以保持响应式    const { userId } = storeToRefs(userStore)    userName // "lucio"    userId // "001"    return {      // 一直会是 "lucio"      userName,      // 这将是响应式的      userId,      // 这将是响应式的      realUserName: computed(() => userStore.userName),      }  },})

    State

    返回初始状态的函数。

    我们补全一下上面的定义Store部分的代码。

    初始化
    import { defineStore } from 'pinia'// 第一个参数是应用程序中 store 的唯一 idexport const useUserStore = defineStore('user', {  state: () => {    return {      // 所有这些属性都将自动推断其类型      userName: 'lucio',      userId: '001',    }  },})
    读取和写入state
    • 通过store示例,可读写。

    const userStore = useUserStore()userStore.userId = '002'userStore.$reset()return { userStore }
    • 通过$patch修改多个数据,参数可以是对象或者函数。

    // 一次修改多个数据userStore.$patch({  userId: '002',  userName: 'lucy',})// 适合对数组进行修改userStore.$patch((state) => {  state.roles.push({ name: 'admin', priority: 1 })})
    • 替换整个state

    userStore.$state = { userId: '002', userName: 'lucy'}// 或者通过pinia实例替换整个应用程序的状态pinia.state.value = {}
    订阅state变化

    可以通过 store 的 $subscribe() 方法查看状态及其变化,其只在patch之后触发一次。

    默认情况下,组件卸载后,订阅会被删除。如果想保留,设置配置项detached为true。

    userStore.$subscribe((mutation, state) => {  // import { MutationType } from 'pinia'  mutation.type // 'direct' | 'patch object' | 'patch function'  // 与 userStore.$id 相同  mutation.storeId // 'user'  // 仅适用于 mutation.type === 'patch object'  mutation.payload // 补丁对象传递给 to userStore.$patch()  // 每当它发生变化时,将整个状态持久化到本地存储  localStorage.setItem('user', JSON.stringify(state))},{ detached: true }, // detached为true,卸载组件后保留订阅)

    Getters

    返回状态的计算值

    定义getter
    import { defineStore } from 'pinia'// 第一个参数是应用程序中 store 的唯一 idexport const useUserStore = defineStore('user', {  state: () => {    return {      // 所有这些属性都将自动推断其类型      userName: 'lucio',      userId: '001',    }  },  getters: {    // 自动推断返回类型为字符串    userText: (state) => `User: ${state.userName}`,    // 也可以使用其他getter, 用this访问store实例,必须要定义返回类型    userTextPlus: (): string => `The name of ${this.userText}`,  }})
    访问getter

    直接用store的实例访问。

    userStore.userText

    (getters也可以传递参数,不是很常用的场景,这里就不示例了。)

    (在A store中,也可以使用B store的getter)

    Actions

    相当于组件中的methods,适合用于定义组件的业务逻辑。

    定义action

    下面我们继续补全上面的示例,在userStore中通过网络请求获取用户数据。

    import { defineStore } from 'pinia'export const useUserStore = defineStore('user', {  state: () => {    return {      userName: 'lucio',      userId: '001',      userData: null,    }  },  getters: {    // ...  },  actions: {  async loginAndGetUserInfo(passWord) {  try {  this.userData = await api.login({password});  showToast('Login success');  } catch(error) {  showToast(error);  return error;  }  }  }})
    订阅action

    可以使用 store.$onAction() 订阅 action 及其结果。

    下面对userStore添加一个订阅,记录上面的登陆操作,所用的时间

    const unsubscribe = userStore.$onAction(  ({    name, // action 的名字    store, // store 实例    args, // 调用这个 action 的参数    after, // 在这个 action 执行完毕之后,执行这个函数    onError, // 在这个 action 抛出异常的时候,执行这个函数  }) => {    // 记录开始的时间变量    const startTime = Date.now()    // 这将在 `store` 上的操作执行之前触发    console.log(`Start "${name}" with params [${args.join(', ')}].`)    // 如果 action 成功并且完全运行后,after 将触发。    // 它将等待任何返回的 promise    after((result) => {      console.log(        `Finished "${name}" after ${          Date.now() - startTime        }ms.\nResult: ${result}.`      )    })    // 如果 action 抛出或返回 Promise.reject ,onError 将触发    onError((error) => {      console.warn(        `Failed "${name}" after ${Date.now() - startTime}ms.\nError: ${error}.`      )    })  })// 手动移除订阅unsubscribe()

    和订阅state一样,组件卸载时,订阅将被删除,可以添加设置第二个参数detach为true,在卸载组件后仍然保留订阅。

    export default {  setup() {    const someStore = useSomeStore()    // 此订阅将在组件卸载后保留    someStore.$onAction(callback, true)    // ...  },}

    以上就是关于“Pinia怎么实现简单的用户状态管理”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

    --结束END--

    本文标题: Pinia怎么实现简单的用户状态管理

    本文链接: https://www.lsjlt.com/news/346526.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Pinia怎么实现简单的用户状态管理
      这篇“Pinia怎么实现简单的用户状态管理”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Pinia怎么实现简单的用户状态管理...
      99+
      2023-07-04
    • Vue3状态管理之Pinia怎么使用
      这篇文章主要介绍“Vue3状态管理之Pinia怎么使用”,在日常操作中,相信很多人在Vue3状态管理之Pinia怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue3状态管理之Pinia怎么使用”的疑...
      99+
      2023-06-30
    • Vue新的状态管理Pinia怎么使用
      今天小编给大家分享一下Vue新的状态管理Pinia怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。为什么有 Vuex ...
      99+
      2023-07-06
    • Vue全新状态管理Pinia怎么用
      这篇文章给大家分享的是有关Vue全新状态管理Pinia怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Vuex 作为一个老牌 Vue 状态管理库,大家都很熟悉了Pinia 是 Vue.js 团队成员专门为 V...
      99+
      2023-06-29
    • vue中使用pinia全局状态管理的实现
      目录与vuex的区别安装引入pinia创建状态目录pinia模块组成创建pinia模块在组件中使用该状态机pinia模块实例中的api讲解状态持久化与vuex的区别 去除了 muta...
      99+
      2024-04-02
    • Vue之Pinia状态管理的方法是什么
      这篇文章主要介绍“Vue之Pinia状态管理的方法是什么”,在日常操作中,相信很多人在Vue之Pinia状态管理的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue之Pinia状态管理的方法是什么...
      99+
      2023-07-05
    • 浅析Vue项目中怎么用Pinia状态管理工具
      安装yarn add pinia -Smain.js引入import {createApp} from "vue" import App from "./app.vue" import store f...
      99+
      2022-11-22
      Vue Pinia
    • Vue3状态管理之Pinia的入门使用教程
      目录Vue3 新的发展方向(来源于尤大知乎)一、Pinia 简介与基础1.1 Pinia 简介1.2 Pinia 基础二、Pinia 在Vue3-Vite中的使用2.1 基础使用流程...
      99+
      2024-04-02
    • Beam中的状态管理怎么实现
      在Beam中,状态管理主要通过Stateful DoFn来实现。Stateful DoFn是一种特殊类型的ParDo,它可以在处理元...
      99+
      2024-04-02
    • 基于ReactContext实现一个简单的状态管理的示例代码
      目录前言封装一个父组件用来包裹其他子组件子组件如何获取数据呢class Component 方式context.ConsumeruseContext总结参考前言 在大多数情况下,我们...
      99+
      2024-04-02
    • python简单的用户管理
      用户管理 如果输入 delete, 则让用户输入” 用户名” 格式字符串, 根据用户名查找 dict 中数据, 若 存在数据则将该数据移除, 若用户数据不存在, 则提示不存在; 如果输入 update, 则让用户输入” 用户名:年龄:联系方...
      99+
      2023-01-31
      简单 用户 python
    • 如何使用Redis实现用户登录状态管理
      《如何使用Redis实现用户登录状态管理,需要具体代码示例》  Redis是一种开源的内存数据库,它被广泛应用于缓存、会话管理和消息队列等领域。在Web开发中,用户登录状态管理是一个非常重要的功能,而Redis正是一个很好的选择来实现这一功...
      99+
      2023-11-09
      redis 用户 登录状态
    • Vue简单状态管理之store模式是什么
      这篇文章给大家分享的是有关Vue简单状态管理之store模式是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概述store 状态管理模式的实现思想很简单,就是定义一个 store 对象,对象里有 state ...
      99+
      2023-06-15
    • Pinia简单使用及数据持久化怎么实现
      这篇文章主要讲解了“Pinia简单使用及数据持久化怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Pinia简单使用及数据持久化怎么实现”吧!基本介绍Pinia 是 Vue.js 的轻...
      99+
      2023-06-30
    • react18中react-redux状态管理怎么实现
      这篇文章主要介绍“react18中react-redux状态管理怎么实现”,在日常操作中,相信很多人在react18中react-redux状态管理怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”rea...
      99+
      2023-06-30
    • 函数指针方法怎么实现简单状态机
      本篇内容主要讲解“函数指针方法怎么实现简单状态机”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“函数指针方法怎么实现简单状态机”吧!状态机简介有限状态机FSM是有限个状态及在这些状态之间的转移和动...
      99+
      2023-06-15
    • java实现简单的客户信息管理系统
      本文实例为大家分享了java实现简单客户信息管理系统的具体代码,供大家参考,具体内容如下 全篇文章开源,源码供读者使用。这是一篇关于java的客户信息管理系统的文章,里面简单实现了数...
      99+
      2024-04-02
    • Vue项目新一代状态管理工具Pinia的使用教程
      目录前言Pinia与Vuex的区别使用Pinia直接修改数据的两种方式使用actions修改数据重置state中数据Pinia持久化存储Pinia模块化实现Pinia中store之间...
      99+
      2022-11-13
      vue pinia状态管理工具 vue pinia用法 vue状态管理工具
    • MySQL 实现点餐系统的订单状态管理功能
      MySQL 实现点餐系统的订单状态管理功能,需要具体代码示例随着外卖业务的兴起,点餐系统成为了不少餐厅必备的工具。而订单状态管理功能是点餐系统中的一个重要组成部分,它能够帮助餐厅准确掌握订单的处理进度,提高订单处理效率,提升用户体验。本文将...
      99+
      2023-11-01
      MySQL 点餐系统 订单状态管理
    • Java实现简单客户信息管理系统
      目录一、目标二、系统结构设计三、键盘访问的实现四、Customer类五、CustomerList类六、CustomerView类七、代码本文实例为大家分享了Java实现客户信息管理系...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作