精宏技术部试用期学习笔记(vue)

父子通信

什么是通信 / 为什么要通信

通信即在不同组件之间传输数据

  • 当在 复用组件 时,需要传递不同数据达成不同的表现效果

  • 能够根据其他组件的行动,响应式 的做出变化

Props

功能: 让父组件信息传递到子组件

code:

假定 index.vue 已经通过 router 挂载在了 '/' 路由下

//index.vue
<script setup>
import { ref } from 'vue';
import vue1 from '../components/vue1.vue'; const num1 = ref(15);
const increase = () => {
num1.value += 1;
} </script> <template>
<h1>Index Page</h1>
<span>num1 = {{ num1 }}</span>
<button @click="increase">increase</button>
<vue1 :numFa="num1"></vue1>
</template>
//vue1.vue
<script setup>
defineProps({
numFa: Number
})
</script> <template>
<h2>这是vue1组件</h2>
<span>numFa: {{ numFa }}</span>
</template>
关于解构

定义之后直接使用就是响应式的

但如果解构之后不用 toRefs 则变成无法响应

    <script setup>
import { toRefs } from 'vue';
const props = defineProps({
numFa: Number
}) // const { numFa = "none" } = props;
//解构1 无法响应 //const { numFa = "defualt" } = toRefs(props);
//解构2 但是可以响应
</script>

注意点:

  • 父组件在定义传递参数时需要使用响应式(ref)
  • 传递参数时,元素内要用 "v-bind:" 来连接响应式变量

ex 其他写法:

//非 <script setup> 写法
export default {
props: {
numFa: Number
}
}
//ts写法
<script setup lang="ts">
defineProps<{
title?: string
likes?: number
}>()
</script>

Emit

原理

子元素触发 事件1 -> emit(传值) -> 父元素 事件2(监听-事件1) -> 获得子元素传值

code

//index.vue
<script setup>
import { ref } from 'vue';
import vue2 from '../components/vue2.vue'; const sonInfo = ref("");
const sonsetInfo = (value) => {
sonInfo.value = value;
alert(sonInfo.value);
}
</script> <template>
<h1>Index Page</h1>
<vue2 @getText="sonsetInfo"></vue2>
</template>
//vue2.vue
<script setup lang="ts">
import { ref } from 'vue'; const emit = defineEmits(["getText"]);
const text = ref("defualt"); const getText = () => {
emit("getText", text.value);
};
</script> <template>
<h2>这是vue2组件</h2>
<div>text: {{ text }}</div>
<input type="text" v-model="text"><br>
<button @click="getText">updata text</button>
</template>

pinia 组件通信

为什么使用 pinia

props 和 emit 是依托于父子组件的关系来传递变量

但在两个不相关的组件之间传递变量就会很麻烦

因此需要 pinia 来大统一变量

如何使用 pinia

1 安装 pinia

pnpm i pinia

安装好后能在 package.json 中查看

2 挂载 pinia

流程类似于 vue-router

这里对 pinia 进行了一个封装

让 mian.ts 高度精炼

同时创建了 stores文件夹

用来存放 pinia 相关文件

//./stores/index.ts
import { createPinia } from "pinia";
const pinia = createPinia(); export default pinia;
//main.ts
import pinia from './stores/index.ts';
app.use(pinia);

3 创建 pinia库

在 stores 中创建文件 transStore.ts

import { defineStore } from "pinia";
import { ref } from "vue"; const transStore = defineStore("trans", () => {
const name = ref("Rosyr");
//在库中定义响应式变量 const setName = (nvalue: string) => {
name.value = nvalue;
};
//使用setName函数 暴露name变量 (即让外界能访问到 return {
name,
setName,
};
//用 return 进行开放store内部
}); export default transStore;

4 在 vue组件 中使用 pinia

import transStore from '../stores/transStore';

先导入库

const newTransStore = transStore();

创建变量存放库

  • 非响应式读取pinia库中的值
const namevalue = newTransStore.name;
  • 响应式读取pinia库中的值
import { storeToRefs } from 'pinia';

const {name} = storeToRefs(newTransStore);

pinia + vue-router

在 app 挂载的时候 router总会比pinia先挂载

因此要在router中使用pinia来实现路由守卫

需要在router中手动引入pinia

import { createPinia } from "pinia";
import transStore from '../stores/transStore'; const pinia = createPinia();
const newTransStore = transStore(pinia); //...

[vue]精宏技术部试用期学习笔记 III的更多相关文章

  1. 初等数论学习笔记 III:数论函数与筛法

    初等数论学习笔记 I:同余相关. 初等数论学习笔记 II:分解质因数. 1. 数论函数 本篇笔记所有内容均与数论函数相关.因此充分了解各种数论函数的名称,定义,符号和性质是必要的. 1.1 相关定义 ...

  2. node+webpack环境搭建 vue.js 2.0 基础学习笔记

    npm install -g vue //全局安装vue npm install -g webpack //全局安装webpack npm install -g vue-cli //全局安装vue-c ...

  3. Vue.js官方文档学习笔记(一)起步篇

    Vue.js起步 Vue.js介绍 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库 ...

  4. vue 去哪网项目 学习笔记(一)

    启动项 mian.js 是整个项目的入口程序 定义局部组建 components 是定义的局部组建 template 渲染app里的内容 单文件组建 单文件组建是以vue 结尾的内容 app组建的内容 ...

  5. Vue + Django 2.0.6 学习笔记 6.1-6.2 商品类别数据接口

    这两节主要是说获取商品类别的1 2 3类的列表和某个类的详情 我直接上代码吧 views.py: from .serializers import CategorySerializer class C ...

  6. Vue.js官方文档学习笔记(三)创建Vue实例

    创建Vue实例 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的: var vm=new Vue({ //选项 }) Vue的设计受到了mvvm的启发 当创建一个 Vue 实 ...

  7. Vue.js官方文档学习笔记(二)组件化应用的构建

    组件化应用的构建 组件化应用允许我们使用小型.独立和通常可复用的组件构建大型应用. Vue注册组件 Vue.component('todo-item',{template:'<li>这是个 ...

  8. vue 2.0源码学习笔记—new Vue ( Vue 初始化过程 )

    new Vue(Vue 初始化) 一个vue实例化到底经历了什么?已下是博主自己的总结,不正确的地方请指出,谢谢~ 一.简述 从使用角度来看,挂载的顺序如下 1. $slots 2. $scopedS ...

  9. vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍

    这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...

  10. VueJs 学习笔记

    VueJs学习笔记 参考资料:https://cn.vuejs.org/ 特效库:TweenJS(补间动画库)  VelocityJS(轻量级JS动画库) Animate.css(CSS预设动画库) ...

随机推荐

  1. 【转载】Linux虚拟化KVM-Qemu分析(五)之内存虚拟化

    原文信息 作者:LoyenWang 出处:https://www.cnblogs.com/LoyenWang/ 公众号:LoyenWang 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作者 ...

  2. Linux 如何删除乱码的文件

    事情是这样,服务器很多人在使用,以前的离职同事留了一大堆不知道是什么东西. 那些文件看不了,又删不掉,非常碍眼. 我搜索了挺多资料,没有一篇文章能真的解决问题(感觉都是抄来抄去的). 用 SFTP 工 ...

  3. 初识C语言中的typedef、define以及Status

    小阿杰最近开始看数据结构啦嘿嘿嘿, 可惜小阿杰C语言功底稀薄,以此篇随笔记录一下我卑微的学习之路/苦涩/苦涩 首先define没啥好说的,在文件开头,定义一个固定不变的值. #define MAXN ...

  4. 2021-7-12 VUE的生命周期

    挂载: beforeCreate created beforeMount mounted:el挂载到实例上时运行 更新: beforeUpdate updated 销毁: beforeDestory ...

  5. test20230225考试总结(2023春 · 图论)

    前言 I hate questions that already exist!! 我讨厌原题!! 赛时得分明细: A B C D E F Total Rank 100 100 10 56 0 44 3 ...

  6. Redis 持久化及集群架构

    1 Redis 持久化 1.1 持久化的概念和原因 Redis 持久化是指将 Redis 服务器中的数据保存到磁盘上,以便在服务器重启后可以重新加载数据.持久化是为了解决 Redis 内存数据库的数据 ...

  7. 文心一言 VS 讯飞星火 VS chatgpt (76)-- 算法导论7.3 1题

    一.如果用go语言,为什么我们分析随机化算法的期望运行时间,而不是其最坏运行时间呢? 文心一言: 在分析算法的性能时,期望运行时间是一个重要的指标,它描述了算法在平均情况下的表现.期望运行时间考虑了所 ...

  8. pycharm+anaconda的关联

    Pycharm+anaconda的关联 关联好处:Pycharm和anaconda关联后,pycharm可以直接调用anaconda中已安装好的模块,而anaconda里安装和卸载模块都比较方便. 关 ...

  9. 《CTFshow-Web入门》05. Web 41~50

    @ 目录 web41 题解 原理 web42 题解 原理 web43 题解 原理 web44 题解 原理 web45 题解 原理 web46 题解 原理 web47 题解 web48 题解 web49 ...

  10. 【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅

    前言 缘由 博友的需求就是我最大的动力 博友一说话,本狗笑哈哈.博友要我写啥,我就写啥. 特来一篇关于SpringBoot接口返回结果及异常统一处理,虽说封不封装都能用,但咱后端也得给前端小姐姐留个好 ...