[vue]精宏技术部试用期学习笔记 III
精宏技术部试用期学习笔记(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的更多相关文章
- 初等数论学习笔记 III:数论函数与筛法
初等数论学习笔记 I:同余相关. 初等数论学习笔记 II:分解质因数. 1. 数论函数 本篇笔记所有内容均与数论函数相关.因此充分了解各种数论函数的名称,定义,符号和性质是必要的. 1.1 相关定义 ...
- node+webpack环境搭建 vue.js 2.0 基础学习笔记
npm install -g vue //全局安装vue npm install -g webpack //全局安装webpack npm install -g vue-cli //全局安装vue-c ...
- Vue.js官方文档学习笔记(一)起步篇
Vue.js起步 Vue.js介绍 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库 ...
- vue 去哪网项目 学习笔记(一)
启动项 mian.js 是整个项目的入口程序 定义局部组建 components 是定义的局部组建 template 渲染app里的内容 单文件组建 单文件组建是以vue 结尾的内容 app组建的内容 ...
- Vue + Django 2.0.6 学习笔记 6.1-6.2 商品类别数据接口
这两节主要是说获取商品类别的1 2 3类的列表和某个类的详情 我直接上代码吧 views.py: from .serializers import CategorySerializer class C ...
- Vue.js官方文档学习笔记(三)创建Vue实例
创建Vue实例 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的: var vm=new Vue({ //选项 }) Vue的设计受到了mvvm的启发 当创建一个 Vue 实 ...
- Vue.js官方文档学习笔记(二)组件化应用的构建
组件化应用的构建 组件化应用允许我们使用小型.独立和通常可复用的组件构建大型应用. Vue注册组件 Vue.component('todo-item',{template:'<li>这是个 ...
- vue 2.0源码学习笔记—new Vue ( Vue 初始化过程 )
new Vue(Vue 初始化) 一个vue实例化到底经历了什么?已下是博主自己的总结,不正确的地方请指出,谢谢~ 一.简述 从使用角度来看,挂载的顺序如下 1. $slots 2. $scopedS ...
- vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍
这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...
- VueJs 学习笔记
VueJs学习笔记 参考资料:https://cn.vuejs.org/ 特效库:TweenJS(补间动画库) VelocityJS(轻量级JS动画库) Animate.css(CSS预设动画库) ...
随机推荐
- 【转载】Linux虚拟化KVM-Qemu分析(五)之内存虚拟化
原文信息 作者:LoyenWang 出处:https://www.cnblogs.com/LoyenWang/ 公众号:LoyenWang 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作者 ...
- Linux 如何删除乱码的文件
事情是这样,服务器很多人在使用,以前的离职同事留了一大堆不知道是什么东西. 那些文件看不了,又删不掉,非常碍眼. 我搜索了挺多资料,没有一篇文章能真的解决问题(感觉都是抄来抄去的). 用 SFTP 工 ...
- 初识C语言中的typedef、define以及Status
小阿杰最近开始看数据结构啦嘿嘿嘿, 可惜小阿杰C语言功底稀薄,以此篇随笔记录一下我卑微的学习之路/苦涩/苦涩 首先define没啥好说的,在文件开头,定义一个固定不变的值. #define MAXN ...
- 2021-7-12 VUE的生命周期
挂载: beforeCreate created beforeMount mounted:el挂载到实例上时运行 更新: beforeUpdate updated 销毁: beforeDestory ...
- test20230225考试总结(2023春 · 图论)
前言 I hate questions that already exist!! 我讨厌原题!! 赛时得分明细: A B C D E F Total Rank 100 100 10 56 0 44 3 ...
- Redis 持久化及集群架构
1 Redis 持久化 1.1 持久化的概念和原因 Redis 持久化是指将 Redis 服务器中的数据保存到磁盘上,以便在服务器重启后可以重新加载数据.持久化是为了解决 Redis 内存数据库的数据 ...
- 文心一言 VS 讯飞星火 VS chatgpt (76)-- 算法导论7.3 1题
一.如果用go语言,为什么我们分析随机化算法的期望运行时间,而不是其最坏运行时间呢? 文心一言: 在分析算法的性能时,期望运行时间是一个重要的指标,它描述了算法在平均情况下的表现.期望运行时间考虑了所 ...
- pycharm+anaconda的关联
Pycharm+anaconda的关联 关联好处:Pycharm和anaconda关联后,pycharm可以直接调用anaconda中已安装好的模块,而anaconda里安装和卸载模块都比较方便. 关 ...
- 《CTFshow-Web入门》05. Web 41~50
@ 目录 web41 题解 原理 web42 题解 原理 web43 题解 原理 web44 题解 原理 web45 题解 原理 web46 题解 原理 web47 题解 web48 题解 web49 ...
- 【规范】SpringBoot接口返回结果及异常统一处理,这样封装才优雅
前言 缘由 博友的需求就是我最大的动力 博友一说话,本狗笑哈哈.博友要我写啥,我就写啥. 特来一篇关于SpringBoot接口返回结果及异常统一处理,虽说封不封装都能用,但咱后端也得给前端小姐姐留个好 ...