Vue3基础——Composition API初体验、合成API详解、setup、Provide 和 inject

news2025/7/20 9:23:10

文章目录

    • p19 组合式 API (Composition API)初体验
    • p20 Vue3合成API详解
    • p21 setup中使用生命周期函数
    • p22 Provide 和 inject

p19 组合式 API (Composition API)初体验

<template>
  <h1 @click="add">计数count: {{ count }}</h1>
  <h1 @click="increment">计数num: {{ num }}</h1>
</template>

<script>
import { ref } from "vue";
export default {
  data() {
    console.log("data");
    return {
      count: 0,
    };
  },
  methods: {
    add() {
      this.count++;
    },
  },

  setup() {
    console.log("setup");
    const num = ref(10);
    function increment() {
      num.value += 10;
    }
    return {
      num,
      increment,
    };
  },
  beforeCreate() {
    console.log("beforeCreate,初始化数据之前");
  },
  created() {
    console.log("created,数据初始化之后");
  },
  beforeMount() {
    console.log("beforeMount,挂载渲染之前");
  },
  mounted() {
    console.log("mounted,挂载渲染之后");
  },
};
</script>

在这里插入图片描述

p20 Vue3合成API详解

<template>
  <h1 @click="add">num: {{ num }}</h1>
  <p @click="change">
    reactive: {{ person.behavior }}-{{ person.name }}-{{ person.reverseName }}
  </p>
  <p>toRefs: {{ behavior }}-{{ name }}-{{ sex }}</p>
</template>

<script>
import { ref, reactive, toRefs, computed, watch, watchEffect } from "vue";
export default {
  setup() {
    const num = ref(0);
    const add = () => {
      num.value += 10;
    };
    const person = reactive({
      name: "zhangsan",
      behavior: "eat",
      sex: "man",
      reverseName: computed(() => {
        return person.name.split("").reverse().join("");
      }),
    });
    const change = () => {
      person.name = "lisi";
    };

    // watchEffect 立即运行一个函数,同时响应式地追踪其依赖,并在依赖更改时重新执行。
    watchEffect(() => {
      console.log(person.name);
      console.log(
        "自动监听,这里面用到了person.name name变化了 就执行这里面内容"
      );
    });
    // 单个监听
    // watch(num, (newValue, oldValue) => {
    //   console.log(newValue, oldValue);
    // });
    // 多个监听
    watch([num, person], (newValue, oldValue) => {
      console.log(newValue, oldValue);
    });
    return {
      num,
      add,
      person,
      ...toRefs(person),
      change,
    };
  },
};
</script>

p21 setup中使用生命周期函数

https://cn.vuejs.org/api/composition-api-setup.html

子组件User.vue

<template>
  <p>子接收到父组件的name:{{ name }}</p>
  <p>子接收到父组件的age:{{ age }}</p>
  <p>description {{ description }}</p>
</template>

<script>
import {
  computed,
  onBeforeMount,
  onMounted,
  onBeforeUpdate,
  onBeforeUnmount,
  onUnmounted,
} from "vue";
export default {
  props: {
    name: String,
    age: Number,
  },
  setup(props, content) {
    console.log(props);
    console.log("content", content);

    const description = computed(() => {
      return props.name + "的年龄是" + props.age;
    });
    onBeforeMount(() => {
      console.log("onBeforeMount");
    });
    onMounted(() => {
      console.log("onMounted");
    });
    return { description };
  },
};
</script>

父组件App.vue

<template>
  <User :name="name" :age="age"></User>
  <button @click="changeName">点击修改名字</button>
</template>

<script>
import User from "./components/User.vue";
import { reactive, toRefs, toRef } from "vue";

export default {
  setup() {
    const obj = reactive({
      name: "张三",
      age: 22,
      sex: "man",
    });
    const name = toRef(obj, "name");
    const changeName = () => {
      name.value = "李四";
    };
    return {
      ...toRefs(obj),
      changeName,
    };
  },
  components: { User },
};
</script>

p22 Provide 和 inject

provide与inject主要用于从父组件向子组件传递数据。

在2.0我们通常用props接收来自父组件的参数,但是一个要从父子组件传递到孙子组件,这种情况就得从父组件到子组件,再从子组件传到孙子组件一级一级传递下去;引入 provide与inject就不需要一级一级向下传递。而是只需从父组件provide出去,再在需要用的组件里面inject即可。

父组件App.vue

<template>
  <Student></Student>
</template>

<script>
import { reactive, provide } from "vue";
import Student from "./components/Student.vue";
export default {
  setup() {
    const student = reactive({
      name: "zhangsan",
      className: "三年二班",
    });
    provide("student", student);
    return { student };
  },
  components: { Student },
};
</script>

子组件Student.vue

<template>
  <h1>学生姓名:{{ name }}</h1>
  <h1>所在班级:{{ className }}</h1>
</template>

<script>
import { inject } from "vue";
export default {
  setup() {
    const student = inject("student");
    return { ...student };
  },
};
</script>

在这里插入图片描述

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

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

相关文章

51单片机笔记:定时器/计数器

单片机笔记 定时器/计数器 定时器/计数器的结构 AT89S51内部两个16位定时器/计数器&#xff1a;T0(P3.4)&#xff0c;T1(P3.5)&#xff0c;定时器/计数器T0由特殊寄存器TH0,TL0构成&#xff0c;T1由特殊功能寄存器TH1&#xff0c;TL1构成 T0,T1都有定时器和计数器两种工作模…

DuckDB学习-初识tpcds

DuckDB学习-1 文章目录DuckDB学习-1跑TPC-DS编译DuckDB支持TPC-DS扩展执行数据生成及查询TPC-DS简单分析&#xff08;v3.2.0&#xff09;事实表维度表跑TPC-DS 编译DuckDB支持TPC-DS扩展 下载代码&#xff0c;然后进源码目录&#xff0c;执行下面两个步骤。 export BUILD_TPC…

Word控件Spire.Doc 【文本】教程(19) ;如何在 C#、VB.NET 中通过 Word 中的正则表达式查找和替换文本

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

【附源码】计算机毕业设计JAVA车辆调度管理系统

【附源码】计算机毕业设计JAVA车辆调度管理系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA my…

计算机毕业设计ssm+vue基本微信小程序的健康食谱交流共享平台

项目介绍 当今社会健康食谱交流共享买卖是必不可少的,人们不管走到哪里都需要有一个健康的身体,有一个强迫的体质,所以健康食谱交流共享市场也是非常火爆&#xff01;不管是健康食谱交流共享公司或者是个人都需要一套完整的管理系统来掌握整个市场信息。针对这一需求,本文设计并…

一步一步教你安装部署 Jenkins,不信你安不上

1、可以去官网 Jenkins 下载jenkins.war包 这里有个坑&#xff1a;jenkins下载的版本需要和jdk版本匹配 我的jdk是1.8,这里选择jenkins版本为2.332.4&#xff0c;下面的链接是jenkins.war安装包直接用 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;8bxy 2、使…

【C++】模板template

前言&#xff1a;本教程使用到的工具是vs2010&#xff1b; 目录 为什么要使用模板&#xff1f; template模板 函数模板 类的模板 template模板的本质 总结 为什么要使用模板&#xff1f; 我们先来大概了解一下模板的概念&#xff0c;下面是菜鸟教程对于模板给出的解释&am…

每天5分钟快速玩转机器学习算法:带有核函数的支持向量机模型

本文重点 硬间隔和软间隔都是在说样本的完全线性可分或者大部分样本点的线性可分。但我们可能会碰到的一种情况是样本点不是线性可分的,比如: 那么这个时候支持向量机软硬不吃,此时要想解决这个问题,我们可以使用一种魔法,我们将他们映射到一个高维空间中,然后再高维空…

链表相关OJ及方法总结

目录​​​​​​​ 第一类&#xff1a;改变链接关系 第二类&#xff1a;快慢指针 第一类&#xff1a;改变链接关系 1. 删除链表中等于给定值 val 的所有结点。 (1)原地删除 struct ListNode* removeElements(struct ListNode* head, int val){if(headNULL){return head…

一般人我劝你还是要不自学软件测试.....

软件测试基础真的很简单&#xff0c;是个人稍微认真点都能懂&#xff0c;这就是好多人说软件测试简单、易懂、好学&#xff0c;然后就是一顿浮夸的言论&#xff0c;误导那些小白&#xff0c;这里我就给那些轻浮的人泼一桶冷水&#xff0c;懂和学会是一码事吗&#xff1f; 这里…

如何高效填写软件测试缺陷报告?

软件缺陷的描述是软件缺陷报告的基础部分&#xff0c;需要使用简单、准确、专业的术语来描述缺陷。否则&#xff0c;它就会含糊不清&#xff0c;可能会误导开发人员&#xff0c;影响开发人员的效率&#xff0c;也会影响测试人员自身的声誉&#xff0c;准确报告缺陷是非常重要的…

[附源码]java毕业设计基于SSM的酒店管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

高新技术企业的认定条件(三)

十、企业创新能力评价 企业创新能力主要从知识产权、科技成果转化能力、研究开发组织管理水平、企业成长性等四项指标进行评价。各级指标均按整数打分&#xff0c;满分为100分&#xff0c;综合得分达到70分以上&#xff08;不含70分&#xff09;为符合认定要求。具体分值如下&…

opencv4.5.5安装的坑

opencv4.5.5安装的坑 Package opencv was not found in the pkg-config search path. Perhaps you should add the directory containing opencv.pc’ to the PKG_CONFIG_PATH environment variable No package ‘opencv’ found 我把对应目录的opencv4.pc修改成了opencv.pc,运…

记录<一个多SDK中引入ffmpeg出现的top1的crash问题>解决方案

文章目录一. 背景二. 分析、定位crash源代码三. 分析汇编四. 分析源码五. 思考一. 背景 App从某个版本开始突然收到一例高频crash&#xff0c;&#xff0c;crash信息如下 crash栈如下&#xff1a; crash栈信息很少&#xff0c;只能看出是线程刚启动就crash了&#xff0c;内存…

Java【类和对象】,你还没对象?我教你new一个!

文章目录前言一、初识面向对象1.什么是面向对象2.面向对象过程二、类的定义与使用1.什么是类2.如何定义类3.示例三、类的实例化1.什么是类的实例化2.类和对象的说明四、this引用1.为什么要有this引用第一种情况第二种情况2.什么是this引用3.this引用的特征五、对象的构造及初始…

ubuntu上运行make menuconfig两种报错

1&#xff09; 如果如上报错&#xff0c;没有target&#xff0c;这是因为运行这个make的时候没在对应的目录下运行&#xff0c;通常是有make的目录&#xff0c;这种系统性的编译的&#xff0c;则是应该在代码的根目录。在根目录下用根目录下的make。 2&#xff09;然后我来到根…

Restful 接口设计-前言(手把手教你入门到精通)

文章目录前言一&#xff1a;什么是API分类一分类二前言二&#xff1a;Web的发展前言三&#xff1a;传统开发模式VS前后端分离传统的开发模式前后端分离了解API和Web的发展有利于帮助你掌握Restful接口设计 前言一&#xff1a;什么是API API&#xff08;Application Programmi…

第三章 多维随机变量及其分布

思维导图 基础知识 二维随机变量 我们研究一个多维的东西&#xff0c;往往先从较低的维度比如说二维作为主要的研究对象&#xff0c;一个是因为维度低会比较简单&#xff0c;易于理解&#xff1b;另一个则是考试中低维的问题往往更加常见 定义与分布函数 定义上其实很简单&am…

双亲委派机制

Java 虚拟机对 class 文件采用的是按需加载的方式&#xff0c;也就是说当需要使用该类时才会将它的 class 文件加载到内存生成 class 对象。而且加载某个类的 class 文件时&#xff0c;Java 虚拟机采用的是双亲委派模式&#xff0c;即把请求交由父类处理&#xff0c;它是一种任…