英语文档不看懂?学习Pinia就是这么简单---state篇

简介: 英语文档不看懂?学习Pinia就是这么简单---state篇

前言

上一篇文章我们大体的介绍了一下 Pinia 的基本信息和基本概念,相信大多数小伙伴都对这个概念有了一个基本的认识。

接下来我们重点学习 Pinia中的一个重要概念 State。如果您之前使用过 Vuex的话,那么对 State 肯定不会陌生,它是所有状态的载体容器,也可以这样说,其它的所有的概念也是围绕着 State 去服务,所以它的重要程度不言而只喻。

看一下 Pinia官网对 State 的基本介绍吧:(个人翻译而来)

4edc953e2c684bbe819ffa954c899c08.png

"大多数的时候,State 是 Store的中心部分,在应用中我们经常以定义一个State开始着手。在 Pinia里面,State被定义成是一个返回初始状态的函数。

这样服务端和客户端就都可以使用。"


定义

从上面的信息中我们要知道一个重点就是 State 要被定义成一个函数类型,且要返回一个初始状态的对象。这个地方和 Vue 中的 data 属性一样。

import { defineStore } from 'pinia'
const useStore = defineStore('storeId', {
  // 为了所有的类型推断建议使用箭头函数
  state: () => {
    return {
      // 下面的属性会被自动推断出类型
      counter: 0,
      name: 'Eduardo',
      isAdmin: true,
    }
  },
}

以上就是简单的定义一个 State


使用

上面我们定义好了一个State,接下来就是如何使用了。

通常情况下我们可以直接对 State的属性进行 `读` 和 `写` 操作

const store = useStore()
store.counter++

除了可以对某个属性进行修改之外,Pinia 还允许我们使用`$patch` 方法进行批量操作属性。用过 react 的同学,对这种操作方式应该不陌生。

store.$patch({
  counter: store.counter + 1,
  name: 'Abalam',
})

当然,凡事有例外,如果我们需要对一个数组进行 push、splice等操作。这样做就会非常的复杂且开销很大。所以,`$patch` 也允许我们传入一个函数类型的参数来方便处理这种复杂的场景

cartStore.$patch((state) => {
  state.items.push({ name: 'shoes', quantity: 1 })
  state.hasChanged = true
})

以上就是对 State 的基本的使用。也是我们平时开发中经常使用的方式,与此同时 Pinia还给我们提供了很多好用的 api 来操作 State 。

个人感觉 Pinia 比 Vuex 真的是方便很多。

其它使用方式

  • 使用 option api(mapState)的方式获取属性,个人感觉这种方式不太直观,个人并不推荐这种方式,当然在某些场景下这种方式还是挺有用的,所以这种方式作为了解就好。用法和Vuex 中的 mapGetter 类似
  • 重置 State。有的时候我们想要恢复 State数据到最初的状态,就可以使用 Pinia 提供的 `$reset` api进行操作
const store = useStore()
store.$reset()
  • 替换 State。个人感觉 Pinia 对 State 真是做了大量的工作,和重置State类似。Pinia 允许我们直接对 State进行替换。当然我们并不推荐使用这种方式,因为这会让我们的状态很难追踪。
store.$state = { counter: 666, name: 'Paimon' }
  • 监听 State的状态变化,主要是使用 $subscribe 方法进行操作,接收一个回调函数,当状态有变化时就会回调函数。在某些场景下还是挺有用的。当然我们也可以使用 Vue中的watch来监听状态变化


总结

上面林林总总介绍了 State 的基本概念和用法,大家要掌握如何定义和使用State。对于State的一些高级用法,要了解,在某些场景下会比较好用。

好啦~ 对于 State 就先介绍这么多。

接下来文章就是 getters 和 actions的用法的讲解了

相关文章
|
JavaScript
手写一个uniapp的步骤条组件
手写一个uniapp的步骤条组件
|
Web App开发 缓存 JavaScript
Python:Python语言下载库或包的常见whl文件集合
Python:Python语言下载库或包的常见whl文件集合
Python:Python语言下载库或包的常见whl文件集合
|
5月前
|
存储 安全 API
如何下载旧版本的 Postman?
旧版本的 Postman 可能有助于更好地兼容不同的框架。 了解如何找到 Postman 的确切版本,以便优化你的 API 开发!
如何下载旧版本的 Postman?
|
消息中间件 NoSQL Kafka
Flink教程(21)- Flink高级特性(End-to-End Exactly-Once)(下)
Flink教程(21)- Flink高级特性(End-to-End Exactly-Once)(下)
231 0
Flink教程(21)- Flink高级特性(End-to-End Exactly-Once)(下)
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
本文讨论了在基于.NET 6和.NET Framework的WinForms项目中添加图表控件的不同方法。由于.NET 6的WinForms项目默认不包含Chart控件,可以通过NuGet包管理器安装如ScottPlot等图表插件。而对于基于.NET Framework的WinForms项目,Chart控件是默认存在的,也可以通过NuGet安装额外的图表插件,例如LiveCharts。文中提供了通过NuGet添加图表控件的步骤和截图说明。
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
|
存储 算法 Java
(四)JVM成神路之深入理解虚拟机运行时数据区与内存溢出、内存泄露剖析
前面的文章中重点是对于JVM的子系统进行分析,在之前已经详细的阐述了虚拟机的类加载子系统以及执行引擎子系统,而本篇则准备对于JVM运行时的内存区域以及JVM运行时的内存溢出与内存泄露问题进行全面剖析。
327 0
|
11月前
|
数据采集 前端开发 开发者
Selenium中如何实现翻页功能
在使用Python的Selenium库进行网页爬虫开发时,翻页操作是常见需求。本文详细介绍如何通过Selenium实现翻页,包括定位翻页控件、执行翻页动作以及等待页面加载等关键步骤,并提供了基于“下一页”按钮和输入页码两种方式的具体示例代码。此外,还特别提醒开发者注意页面加载完全、动态内容加载及反爬机制等问题,确保爬虫稳定高效运行。
1184 3
|
机器学习/深度学习 数据采集 算法
【2024泰迪杯】A 题:生产线的故障自动识别与人员配置 Python代码实现
【2024泰迪杯】A 题:生产线的故障自动识别与人员配置 Python代码实现
229 0
|
机器学习/深度学习 人工智能 文字识别
AI计算机视觉笔记二十:PaddleOCR环境搭建及测试
OCR技术广泛应用于日常生活中,与人脸识别一样常见。PaddleOCR是一个基于飞桨的OCR工具库,具有超轻量级中文OCR模型,支持中英文数字组合、竖排及长文本识别。本文档详细介绍了PaddleOCR的学习过程,包括环境搭建、安装、样本标注及测试步骤。使用AutoDL云平台进行环境创建,并提供了详细的命令行操作指南,帮助用户顺利完成PaddleOCR的部署与测试。
|
Shell 调度 Docker
在Docker中,如何清理批量后台停止的容器?
在Docker中,如何清理批量后台停止的容器?