vue之pinia组件的使用

1、搭建pinia环境

cnpm i pinia #安装pinia的组件
cnpm i nanoid #唯一id,相当于uuid
cnpm install axios  #网络请求组件

2、存储+读取数据

存储数据

>> Count.ts文件

import {defineStore} from 'pinia'

export const useCountStore = defineStore('count',{
    // actions里面放置的是一个一个的方法,用于响应组件中的“动作”
    actions:{
      increment(value:number){
        console.log("increment被调用了",value)
        // 修改数据(this是当前的store)
        this.sum += value
      }

    },
    // 真正存储数据的地方
    state(){
        return {
          sum:6,
          school:'attth',
          address:'bbhsh'
        }
    }
})

 读取数据

>> Count.vue 文件

<template>
    <div class="count">
       <!-- <h2>当前求和为:{
  
  {sum}}</h2> -->
      <h2>当前求和为:{
  
  {sum}},放大10倍:{
  
  { bigSum }}</h2>
      <h3>{
  
  { school }},变成大写:{
  
  { upperSchool }} {
  
  { address }}</h3>
       <select v-model.number="n">
           <option value="1">1</option>
           <option value="2">2</option>
           <option value="3">3</option>
       </select>
       <button @click="add">加</button>
       <button @click="minus">减</button>
    </div>
</template>

<script setup lang="ts" name="App">
   import {ref,toRefs} from 'vue';
   import {useCountStore} from '@/store/count'
   import {storeToRefs} from 'pinia'
   // 使用userCountStore,得到一个专门保存count相关的store
   const countStore = useCountStore()
   console.log(countStore)
   
   //使用toRefs会导致countSotre下的所有属性和方法都变成响应式,代价太大
    const {sum,school,address} = toRefs(countStore) 

</script>


<style scoped>
  .count {
    background-color: skyblue;
    padding: 10px;
    border-radius: 10px;
    box-shadow: 0 0 10px;
  }
  select,button {
    margin: 0 5px;
    height: 25px;
  }
</style>

3、修改数据

  //  let sum = ref(1) //当前求和
   let n = ref(1)  //用户选择的数字
   // 方法
   function add(){
    // 第一种修改方式
    // countStore.sum += 1

    // 第二种修改方式
    // countStore.$patch({
    //   sum:888,
    //   // school:'哈哈',
    //   // address:'南京'
    // })
    // 第三种修改方式
    countStore.increment(n.value)

   }
   function minus(){
    countStore.sum -= n.value

   }

4、_storeToRefs

   //使用toRefs会导致countSotre下的所有属性和方法都变成响应式,代价太大

  //  const {sum,school,address} = toRefs(countStore)

  //  console.log('!!!!',toRefs(countStore))

  // storeToRefs 只会关注store中的数据,不会关注里面的方法

   const {sum,school,address,bigSum,upperSchool} = storeToRefs(countStore)

5、getters的使用

import {defineStore} from 'pinia'

export const useCountStore = defineStore('count',{
    // actions里面放置的是一个一个的方法,用于响应组件中的“动作”
    actions:{
      increment(value:number){
        console.log("increment被调用了",value)
        // 修改数据(this是当前的store)
        this.sum += value
      }

    },
    // 真正存储数据的地方
    state(){
        return {
          sum:6,
          school:'attth',
          address:'bbhsh'
        }
    },
    getters:{ // 对数据不满意进行处理
      // bigSum(state){
      //   return state.sum*10
      // },
      bigSum:state => state.sum * 10,
      // upperSchool(state){
      //   return state.school.toUpperCase()
      // }
      upperSchool():string{
        return this.school.toUpperCase()
      }
    }
})

6、_$subscribe的使用

   //可以实现刷新不丢失
   talkStore.$subscribe((mutate,state)=>{
    console.log('talkStore里面保存的数据发生了变化')
    localStorage.setItem("talkList",JSON.stringify(state.talkList)) //浏览器的本地存储
   })
state(){
        return {
           talkList: (JSON.parse(localStorage.getItem('talkList') as string) || [])
         }
     }

7、_store组合式写法

import {reactive} from 'vue'
export const useTalkStore = defineStore('talk',()=>{
  // talkList就是state
  const talkList = reactive(JSON.parse(localStorage.getItem('talkList') as string) || [])


  // getAtalk函数相当于actions
  async function getATalk(){
      //发请求,下面这行的写法是:连续解构赋值+重命名
      let {data:{content:title}} = axios.get("http://xxxxx/api/rand?format=json")
      // console.log(data)
      //把请求回来的字符串,包装成一个对象
      let obj = {id:nanoid(),title}
      talkList.unshift(obj)
    }

    return {talkList,getATalk}
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/962327.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL — 数据库增删改查操作】深入解析MySQL的 Update 和 Delete 操作

1. 测试数据 mysql> select* from exam1; ----------------------------------------- | id | name | Chinese | Math | English | ----------------------------------------- | 1 | 唐三藏 | 67.0 | 98.0 | 56.0 | | 2 | 孙悟空 | 87.0 | 78.…

数据结构与算法之二叉树: LeetCode LCP 10. 二叉树任务调度 (Ts版)

二叉树任务调度 https://leetcode.cn/problems/er-cha-shu-ren-wu-diao-du/description/ 描述 任务调度优化是计算机性能优化的关键任务之一。在任务众多时&#xff0c;不同的调度策略可能会得到不同的总体执行时间&#xff0c;因此寻求一个最优的调度方案是非常有必要的 通…

JAVA 接口、抽象类的关系和用处 详细解析

接口 - Java教程 - 廖雪峰的官方网站 一个 抽象类 如果实现了一个接口&#xff0c;可以只选择实现接口中的 部分方法&#xff08;所有的方法都要有&#xff0c;可以一部分已经写具体&#xff0c;另一部分继续保留抽象&#xff09;&#xff0c;原因在于&#xff1a; 抽象类本身…

游戏引擎 Unity - Unity 启动(下载 Unity Editor、生成 Unity Personal Edition 许可证)

Unity Unity 首次发布于 2005 年&#xff0c;属于 Unity Technologies Unity 使用的开发技术有&#xff1a;C# Unity 的适用平台&#xff1a;PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域&#xff1a;开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之用户注册

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f3af;项目基本介绍 &#x1f6a6;项…

视频多模态模型——视频版ViT

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细解读多模态论文《ViViT: A Video Vision Transformer》&#xff0c;2021由google 提出用于视频处理的视觉 Transformer 模型&#xff0c;在视频多模态领域有…

DeepSeek本地部署(windows)

一、下载并安装Ollama 1.下载Ollama Ollama官网:Ollama 点击"Download",会跳转至下载页面。 点击"Download for Windows"。会跳转Github进行下载,如下载速度过慢,可在浏览器安装GitHub加速插件。 2.安装Ollama 双击下载的安装文件,点击"Inst…

1 HDFS

1 HDFS 1. HDFS概述2. HDFS架构3. HDFS的特性4. HDFS 的命令行使用5. hdfs的高级使用命令6. HDFS 的 block 块和副本机制6.1 抽象为block块的好处6.2 块缓存6.3 hdfs的文件权限验证6.4 hdfs的副本因子 7. HDFS 文件写入过程&#xff08;非常重要&#xff09;7.1 网络拓扑概念7.…

全国31省空间权重矩阵(地理相邻空间、公路铁路地理距离空间、经济空间)权重矩阵数据-社科数据

中国31个省份空间权重矩阵-社科数据https://download.csdn.net/download/paofuluolijiang/90028597 https://download.csdn.net/download/paofuluolijiang/90028597 空间权重矩阵是反映个体在空间中依赖关系的矩阵&#xff0c;本数据计算全国31个省三种标准化处理的空间权重矩…

Flask框架基础入门教程_ezflaskapp

pip install flaskFlask 快速入门小应用 学东西&#xff0c;得先知道我们用这个东西&#xff0c;能做出来一个什么东西。 一个最小的基于flask 的应用可能看上去像下面这个样子&#xff1a; from flask import Flask app Flask(__name__)app.route(/) def hello_world():ret…

机器学习笔记——特征工程

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本笔记介绍机器学习中常见的特征工程方法、正则化方法和简要介绍强化学习。 文章目录 特征工程&#xff08;Fzeature Engineering&#xff09;1. 特征提取&#xff…

Cursor火出圈,未来程序员还有出路吗?

大家好&#xff0c;我是凡人。 今天我表弟家邻居的阿姨&#xff0c;托他问问我目前程序员还有前景吗&#xff0c;希望我根据十几年的经验给出点建议&#xff0c;看看程序员这条路未来能不能走。 一下子不知道该怎么回复他了&#xff0c;如果是三年前问我&#xff0c;肯定毫不…

如何移植ftp服务器到arm板子?

很多厂家提供的sdk&#xff0c;一般都不自带ftp服务器功能&#xff0c; 需要要发人员自己移植ftp服务器程序。 本文手把手教大家如何移植ftp server到arm板子。 环境 sdk&#xff1a;复旦微 Buildroot 2018.02.31. 解压 $ mkdir ~/vsftpd $ cp vsftpd-3.0.2.tar.gz ~/vs…

第5章 公共事件

HarmonyOS通过公共事件服务为应用程序提供订阅、发布、退订公共事件的能力。 5.1 公共事件概述 在应用里面&#xff0c;往往会有事件。比如&#xff0c;朋友给我手机发了一条信息&#xff0c;未读信息会在手机的通知栏给出提示。 5.1.1 公共事件的分类 公共事件&#xff08…

STM32 对射式红外传感器配置

这次用的是STM32F103的开发板&#xff08;这里面的exti.c文件没有how to use this driver 配置说明&#xff09; 对射式红外传感器 由一个红外发光二极管和NPN光电三极管组成&#xff0c;M3固定安装孔&#xff0c;有输出状态指示灯&#xff0c;输出高电平灯灭&#xff0c;输出…

【数据结构】(2)时间、空间复杂度

一、衡量算法好坏的指标 时间复杂度衡量算法的运行速度&#xff0c;空间复杂度衡量算法所需的额外空间。这些指标&#xff0c;是某场景中选择使用哪种数据结构和算法的依据。如今&#xff0c;计算机的存储器已经变得容易获得&#xff0c;所以不再太关注空间复杂度。 二、渐进表…

FBX SDK的使用:基础知识

Windows环境配置 FBX SDK安装后&#xff0c;目录下有三个文件夹&#xff1a; include 头文件lib 编译的二进制库&#xff0c;根据你项目的配置去包含相应的库samples 官方使用案列 动态链接 libfbxsdk.dll, libfbxsdk.lib是动态库&#xff0c;需要在配置属性->C/C->预…

Ansible自动化运维实战--yaml的使用和配置(7/8)

文章目录 一、YAML 基本语法1.1. 缩进1.2. 注释1.3. 列表1.4. 字典 二、Ansible 中 YAML 的应用2.1. Ansible 剧本&#xff08;Playbooks&#xff09;2.2. 变量定义2.3. 角色&#xff08;Roles&#xff09;2.4. Inventory 文件2.5. 数据类型2.6. 引用变量 在 Ansible 里&#x…

springboot集成钉钉,发送钉钉日报

目录 1.说明 2.示例 3.总结 1.说明 学习地图 - 钉钉开放平台 在钉钉开放文档中可以查看有关日志相关的api&#xff0c;主要用到以下几个api&#xff1a; ①获取模板详情 ②获取用户发送日志的概要信息 ③获取日志接收人员列表 ④创建日志 发送日志时需要根据模板规定日志…

Node.js下载安装及环境配置教程 (详细版)

Node.js&#xff1a;是一个基于 Chrome V8 引擎的 JavaScript 运行时&#xff0c;用于构建可扩展的网络应用程序。Node.js 使用事件驱动、非阻塞 I/O 模型&#xff0c;使其非常适合构建实时应用程序。 Node.js 提供了一种轻量、高效、可扩展的方式来构建网络应用程序&#xff0…