pinia踩坑之旅——在组件外使用pinia

news2024/11/17 12:54:43

pinia踩坑之旅——在组件外使用pinia

缘由

最近在使用 pinia 开发项目时产生了一个 bug,说在定义 pinia 前使用了 pinia。

报错如下:

在这里插入图片描述

代码展示

先来看一个我的代码(这里我新开了一个项目用于演示),如果懒得看代码的可以直接跳过看代码说明。

// main.js

import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'

const app = createApp(App).use(createPinia()).mount('#app')
<!-- App.vue -->

<template>
  <div>{{ countStore.count }}</div>
  <button @click="add">点击+1</button>
</template>

<script setup>
import useCountStore from "./stores/count.js";
import add from "./utils/add.js";

const countStore = useCountStore();
</script>
// stores/count.js

import { defineStore } from 'pinia';

export default defineStore('count', {
  state: () => ({
    count: 0
  }),
  actions: {
    add: function () {
      this.count++;
    }
  }
})
// utils/add.js

import useCountStore from '../stores/count.js'

const countStore = useCountStore()

export default function () {
  countStore.add();
}

代码说明

这里我在 utils 目录下创建了一个 js 文件用于定义一个工具函数,而这个工具函数需要用到 pinia 中的一个 action,此时就产生了报错。

报错分析

在这里插入图片描述

这里报错我在引入 pinia 前使用了 pinia。

我的第一反应时是不是我忘写 use(pinia) 了,然后我去 main.js 看了代码,发现我确实引入了 pinia,这时我就很疑惑为什么我引用了 pinia 却报错说我没引入。

没办法,只能详细看了一下报错,在最后一行显示 at add.js:3:20,说明我们的工具函数文件有问题,但是在组件中也是这样引入的,没有问题,这时就陷入了迷茫,不知道哪里有问题了。

没办法,只能去官网看一下有没有相关的解释了。

查阅官网 - 找出原因

官网 - 指南 - 核心概念这里额外写了一个组件外的 Store,先看看和组件内使用有什么区别。

这里有一句话引起了我的注意:

在 setup() 中,你不需要再做任何事情。但在组件之外,情况就有点不同了。实际上,useStore() 给你的 app 自动注入了 pinia 实例。这意味着,如果 pinia 实例不能自动注入,你必须手动提供给 useStore() 函数。

解释一下:

其实 useStore() 是需要传入 pinia 实例的,但是在 setup() 中已经自动注入了 pinia 实例,所以即使你不传入任何参数也能正常使用,但是在组件外属于非 setup(),这时就需要老老实实的按规矩调用人家的 API 了。

解决问题

既然已经找到了原因,现在就差解决问题了,即我需要在 add.js 中引入 pinia 实例并作为参数进行传递。

此时又出现了一个问题,之前为了简写代码,根本没有将 pinia 实例用变量进行保存,所以现在的代码实现不了这一点。

为了让以后遇到类似的问题都能够更好的解决,决定在 stores 目录下创建一个入口文件 index.js 专门用于导出 pinia 实例。

// stores/index.js

import { createPinia } from 'pinia'

const pinia = createPinia();

export default pinia;
// main.js

import { createApp } from 'vue'
import App from './App.vue'
import pinia from './stores/index.js'

const app = createApp(App).use(pinia).mount('#app')
// utils/add.js

import pinia from '../stores/index.js'
import useCountStore from '../stores/count.js'

const countStore = useCountStore(pinia)

export default function () {
  countStore.add();
}

现在,在组件外就能正常使用 pinia 了。

总结

我们在使用一项不熟悉的技术时往往都是去网上找一篇使用文章看下用法就上手了,这么做的好处时能够最快速的上手在项目中进行使用,但是这类文章往往只会把基本的用法进行描述,而不会把一些坑点说出来,如果在使用时恰好遇到了就非常棘手。

我推荐三种我日常使用的比较多的解决办法,以及各自的优缺点:

  1. 百度

    没错,你没有看错,就是百度,就是这么朴实无华。

    把报错复制到百度直接搜结果,如果不是一些比较冷门或者先进的技术问题都能搜得到。

    优点:速度最快

    缺点:网上资料质量参差不全,容易遇到一些 ly 文章很耗费时间

  2. 官网

    优点:去翻官网不仅仅可以解决遇到的问题,还能学习到这项技术更多的东西。

    缺点:比较耗时,需要有耐心去找

  3. 问群友

    相信大家都多多少少有那么两、三个技术群,问群友说不定有在这方面有研究的群友能够解答你的问题,甚至还能给你讲为什么,当然,这个就看人了。

    优点:运气好群友不仅能解决问题,还能跟你说为什么会出现这个问题

    缺点:运气差没有人鸟就很尴尬

最后还是提一下,遇到问题时一定要先自己尝试去解决,不要一遇到就问人,确实解决不了再去问别人是否有这一方面的研究。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python基础】数值类型

int(整形) 在 Python 中定义变量是 不需要指定类型&#xff08;在其他很多高级语言中都需要&#xff09; 整形&#xff0c;也被称之为整数。整数就是数学中的数字。 整形在Python中不受长度限制大小范围 使用 type 函数可以查看一个变量的类型 In[1]: 1 Out[1]: 1In[2]: t…

Win10修改编辑hosts文件无法保存的处理方法

1.首先打开hosts文件所在位置&#xff0c;我们输入C:WindowsSystem32Driversetc后回车就可以打开了&#xff0c;右键hosts文件&#xff0c;选择属性。 2.点击hosts属性对话框里的“高级”。 3.在hosts的高级安全设置界面点击更改权限&#xff0c;在新弹出的对话框里点击添加按…

TStor CSP文件存储在大模型训练中的实践

业务背景 大模型作为人工智能领域的重要发展趋势&#xff0c;正在逐渐改变人们的生活和工作方式。随着近年来大模型领域技术的突破&#xff0c;各类语言模型、图像模型、视频模型快速演进&#xff0c;国内外市场也不断涌现出优秀的大模型研究及商业化平台&#xff0c;预期通过…

竞赛 深度学习人体语义分割在弹幕防遮挡上的实现 - python

文章目录 1 前言1 课题背景2 技术原理和方法2.1基本原理2.2 技术选型和方法 3 实例分割4 实现效果5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习人体语义分割在弹幕防遮挡上的应用 该项目较为新颖&#xff0c;适合作为竞…

GoogleNet论文精读

论文名&#xff1a;Going depper with convolutions论文下载地址&#xff1a;https://github.com/jixiuy/paper引言第一段&#xff1a;背景成绩1*1的卷积在channel上升维和降维&#xff0c;channel融合&#xff0c;计算方法上等价于FNNGAP&#xff08;全局平均池化&#xff09;…

协同云办公原来可以这么简单!只需掌握这5个技巧

随着云计算技术的发展&#xff0c;协同云办公已经成为越来越多企业和团队的必备工具。但是&#xff0c;对于很多人来说&#xff0c;如何高效地进行协同云办公却仍是一个挑战。本文将介绍五个简单的技巧&#xff0c;让你轻松掌握协同云办公的秘诀&#xff0c;让你的工作更高效、…

《潮玩产业发展报告(2023)》发布 泡泡玛特进军海外潮玩市场

近期&#xff0c;新华网联合中国社会科学院财经战略研究院发布了《超越潮流&#xff1a;千亿级潮玩产业彰显人文经济价值——潮玩产业发展报告&#xff08;2023&#xff09;》&#xff08;下称《报告》&#xff09;。针对潮玩产业快速发展&#xff0c;课题组组长、中国社会科学…

25台兰博基尼跑车赛道巡游!泡泡玛特MOLLY攒的局就是这么拉风

入秋以来气温逐渐转冷&#xff0c;但泡泡玛特的市场活动却持续升温&#xff1a;国内首个潮玩行业沉浸式IP主题乐园泡泡玛特城市乐园正式开园&#xff1b;2023PTS上海国际潮流玩具展&#xff1b;入驻美国第二大商场、布里斯班再拓新店等海外布局步伐不停……将广大消费者的身心带…

C++数据结构X篇_18_二叉树的创建(根据遍历结果创建二叉树;#号法创建树)

本篇将会介绍二叉树的创建&#xff0c;重点学习#号法创建树的方法。 文章目录 1. 根据遍历结果创建二叉树&#xff08;只需记住结论即可&#xff09;1.1 首先有一个问题&#xff0c;根据中序遍历的结果能确定一棵树吗&#xff1f;1.2 那如何才能确定一棵树&#xff1f;&#x…

Python 框架学习 Django篇 (四) 数据库增删改查(CURD)

在上一章结尾我们了解到如采用前后端开发分离的架构模式开发&#xff0c;后端几乎不负责任何展现界面的工作&#xff0c;只负责对数据进行管理 &#xff0c;对数据的管理主要体现在&#xff1a; &#xff08;增加、修改、删除、列出 &#xff09;具体的接口参考大佬的文档BYSM…

插入排序改进 将交换变成赋值语句 优点适用于近乎有序的序列

效果非常的明显 下面给出代码截图 再给出原代码 #include<iostream> #include<string> #include "Student.h" #include "sorttesthelper.h" using namespace std;template<typename T >void selectionSort( T arr[], int n){for(int i…

MATLAB——Decision Tress决策树程序

给个关注呦&#xff01;欢迎关注微♥公众号“电击小子程高兴的MATLAB小屋”&#xff0c;海量资源等你来呦&#xff01; 光储直流微电网MATLAB/Simulink仿真 光伏PV三相并网逆变器 %% I. 清空环境变量 clear all clc warning off %% II. 导入数据 第一列是序号 第二…

让你至少拿2份offer的软件测试面试题来了(100题带标准答案)

一、自我介绍 二、灵活问题 1、大概说说之前公司的测试流程 2、测试报告有哪些内容? 3、如何保证用例的覆盖度&#xff1f; 4、什么是测试用例&#xff0c;什么是测试脚本&#xff1f;两者的关系 5、Bug的级别&#xff0c;按照什么划分 6、你认为是bug&#xff0c;开发认…

微信小程序开发的OA会议之会议,投票,个人中心的页面搭建及模板,还有自定义组件的学习

目录 一、自定义组件 1. 创建 2. 定义 3. 编写 4. 使用 二、会议 1. 数据 2. 显示 3. 样式 三、个人中心 1. 页面 2. 样式 四、投票 1. 引用 2. 数据 3. 页面 4. 样式 每篇收获 一、自定义组件 开发者可以将页面内的功能模块抽象成自定义组件&#xff0c;以…

国外访问学者面签技巧

当涉及国外访问学者的面签时&#xff0c;提前准备和掌握一些技巧可以大大增加成功的机会。本文知识人网小编将为您介绍一些关键的面签技巧&#xff0c;帮助您在国外访问学者面签中表现出色。 1.详细准备材料&#xff1a;在面签前&#xff0c;确保您已经准备好所有所需的文件和材…

乙酰基四肽-3/Acetyl Tetrapeptide-3——刺激毛囊,长出新头发,有效防止秃头

社会对头发很着迷。从圣经人物参孙&#xff08;他从头发中获得力量&#xff0c;并说如果剃光头他就会失去力量&#xff09;&#xff0c;到社交媒体上无休无止地谈论名人的标志性风格&#xff0c;头发是一个永恒的话题。 为什么痴迷&#xff1f;好吧&#xff0c;我们的头发是外…

分布式事务及CAP和BASE顶底

一、分布式事务 单体应用肯定就不存在分布式事务了&#xff0c;只有在分布式微服务系统中&#xff0c;各个服务之间通过RPC调用后&#xff0c;每个微服务有自己和数据库的连接&#xff0c;各个微服务的回滚不影响其他的微服务事务&#xff0c;这几必须使用分布式事务来解决分布…

2022年京东双十一家用电器全品类数据回顾

2023年双十一临近&#xff0c;特此带大家回顾一下去年双十一热门品类的一些战况数据。 由于涉及到热门细分品类众多&#xff0c;会分为多篇内容。 本篇先从京东家用电器品类说起。 2022年双11期间&#xff0c;京东家用电器累计销量2960万件&#xff0c;累计销售额约280亿元&…

2023下半年软考考试方式、考试时间和批次安排!(附加模拟系统绘图操作说明)

注意了下半年考试的伙伴们&#xff01;官方发了通告了&#xff01; 按照《2023年下半年计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试有关工作调整的通告》&#xff0c;自2023年下半年起&#xff0c;计算机软件资格考试方式均由纸笔考试改革为计算机化考试。 …

便携式电源,移动电源,电源组,便携式汽车应急启动电源的适用范围是什么?合规标准是什么?如何办理?

便携式电源&#xff0c;移动电源&#xff0c;电源组&#xff0c;便携式汽车应急启动电源的适用范围是什么&#xff1f;合规标准是什么&#xff1f;如何办理&#xff1f; 一、亚马逊的便携式电源&#xff0c;移动电源&#xff0c;电源组&#xff0c;便携式汽车应急启动电源的适…