精宏技术部试用期学习笔记(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. PlayWright(二十一)- Pytest插件报告

    1.下载 pytest框架有官方的报告pip install pytest-html   下载成功,那我们怎么使用呢?   2.使用 可以直接在配置文件里使用   在 pytest 配置文件中, 增加 ...

  2. 洛谷 T356695 文字处理软件(重置版)

    很简单了啊! 说普及- 我都不信 作者(也就是我)链接:https://www.luogu.com.cn/problem/T356695 好好想想!!!! 题目! 文字处理软件(重置版) 题目背景 A ...

  3. DHorse v1.3.0 发布,基于k8s的发布平台

    综述 DHorse是一个简单易用.以应用为中心的云原生DevOps系统,具有持续集成.持续部署.微服务治理等功能,无需安装依赖Docker.Maven.Node等环境即可发布Java.Vue.Reac ...

  4. 青少年CTF平台-Web-POST&GET

    题目描述 一星简单题,看我如何给你过了. 启动环境,等待三十秒先喝口水. 做题过程 访问题目地址,说让我们用GET方式提交一个名称为get且值为0的变量. 在URL后面加上?get=0,回车.已经成功 ...

  5. Git Cherry-pick使用

    概述 无论项目大小,当你和一群程序员一起工作时,处理多个 Git 分支之间的变更都会变得很困难.有时,与其把整个 Git 分支合并到另一个分支,不如选择并移动几个特定的提交.这个过程被称为 " ...

  6. 一个超经典 WinForm 卡死问题的最后一次反思

    一:背景 1. 讲故事 在我分析的 200+ dump 中,同样会遵循着 28原则,总有那些经典问题总是反复的出现,有很多的朋友就是看了这篇 一个超经典 WinForm 卡死问题的再反思 找到我,说 ...

  7. 数据api接口就是应用集成吗?

    ​ 数据 API 接口和应用集成是两个不同的概念,但是它们之间有一定的联系.数据 API 接口是一种用于访问和传输数据的标准化接口,而应用集成则是将不同的应用程序和系统整合在一起,实现数据和业务流程的 ...

  8. H.265+SRS6.0服务器部署

    H.265+SRS6.0服务器部署 SRS从6.0开始,全面支持H.265,包括RTMP.FLV.HLS.GB28181.WebRTC等等.具体的服务器部署及H.265推流步骤如下. 1. SRS 要 ...

  9. C++的编译链接与在vs中build提速

    通过gcc或msvc,clang等编译器编译出来的C++源文件是.o文件.在windows上也就是PE文件,linux为ELF文件,在这一步中,调用其它代码文件中的函数的函数地址是未知的(00000) ...

  10. python3利用smtplib发送、抄送邮件并附带附件

    python3利用smtplib发送.抄送邮件并附带附件 1. 导包 import smtplib from email.mime.text import MIMEText from email.mi ...