当前位置: 首页 > article >正文

【愚公系列】《循序渐进Vue.js 3.x前端开发实践》028-组件Props属性的高级用法

标题详情
作者简介愚公搬代码
头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
近期荣誉2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳博主等。
博客内容.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
欢迎👍点赞、✍评论、⭐收藏

文章目录

  • 🚀前言
  • 🚀一、组件Props属性的高级用法
    • 🔎1.HTML 部分解析
    • 🔎2.JavaScript 部分解析
      • 🦋2.1 Vue 应用的创建
      • 🦋2.2 组件 `comp1` 的定义
      • 🦋2.3 `props` 定义与验证
      • 🦋2.4 `setup` 函数
      • 🦋2.5 模板部分
      • 🦋2.6 组件注册和挂载
    • 🔎3.代码运行时的展示效果
    • 🔎4.总结


🚀前言

在 Vue.js 组件化开发中,Props 是实现组件间数据传递和交互的核心机制。通过 Props,父组件可以将数据传递给子组件,从而实现灵活的组件组合和复用。然而,随着应用的复杂性增加,简单的 Props 使用可能无法满足需求。这就需要我们深入探索 Props 属性的高级用法,以更好地管理数据流、提高组件的可维护性和灵活性。

本篇文章将围绕组件 Props 属性的高级用法展开,深入解析如何有效利用类型验证、默认值、动态 Props、以及计算属性和观察者(watchers)等特性来增强组件的功能。我们还将讨论如何处理复杂数据结构和自定义 Props 类型,帮助你在实际开发中灵活应对各种业务场景。

🚀一、组件Props属性的高级用法

🔎1.HTML 部分解析

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue组件Props</title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
    <div id="Application">
        <comp1 :count="11"></comp1>
    </div>
    <script>
        ...
    </script>
</body>
</html>
  • <div id="Application">:这是 Vue 应用的挂载容器,Vue 应用将挂载到这个 div 元素上,显示组件的内容。
  • <comp1 :count="11"></comp1>:这是自定义组件 comp1,并将一个名为 count 的 prop 传递给它,值为 11。在 Vue 中,: 语法表示将 count 属性绑定为动态值。

🔎2.JavaScript 部分解析

🦋2.1 Vue 应用的创建

const { createApp, ref, computed } = Vue
const App = createApp({})
  • createApp({}):创建一个 Vue 应用实例 App,其中传入的对象是 Vue 应用的根组件选项,但此处为空对象,表示没有根组件,主要用于注册其他组件。
  • refcomputed:这两个是 Vue 3 中 Composition API 的功能:
    • ref 用来定义响应式变量;
    • computed 用来创建计算属性。

🦋2.2 组件 comp1 的定义

const comp1 = {
    props: {
        count: {
            validator: function(value) {
                if (typeof(value) != 'number' || value <= 10) {
                    return false
                }
                return true
            }
        }
    },
    setup(props) {
        const { count } = props
        const thisCount = ref(count)
        const click = () => {
            thisCount.value += 1
        }
        const innerCount = computed(() => {
            return count + thisCount.value
        })
        return { innerCount, thisCount, click }
    },
    template: `
        <button @click="click">点击</button>
        <div>计数:{{this.thisCount}}</div>
    `
}

🦋2.3 props 定义与验证

  • propsprops 是 Vue 组件接收外部数据的方式。在此组件 comp1 中,props 选项定义了一个名为 count 的属性:

    • count 的 验证器 (validator) 用来验证传入的 count 值是否符合要求:
      • 传入值必须是数字;
      • 传入值必须大于 10
    • 如果验证失败,Vue 会在开发环境中发出警告。

    这里,组件期望接收一个 count 属性,如果父组件传递的 count 值无效(例如,值不是数字或者小于等于 10),Vue 会给出警告。

🦋2.4 setup 函数

setup() 是 Vue 3 中 Composition API 的核心,它在组件实例创建之前执行。它的返回值会作为组件的响应式状态和方法暴露给模板。

  • const { count } = props:解构赋值,将传入的 props 中的 count 提取出来。这意味着 count 是从父组件传递过来的 count 属性的值。

  • thisCount = ref(count):使用 ref 创建一个响应式变量 thisCount,并将其初始值设置为 countref 用来创建响应式的原始类型(如数字、字符串等)。

  • click:定义一个点击事件方法 click,每次点击按钮时,thisCount.value 会增加 1。thisCount.value 是响应式的,改变它会触发视图更新。

  • innerCount = computed(() => { ... })computed 用来创建计算属性。这里的 innerCount 计算了 count(从父组件传递)和 thisCount(本地响应式变量)的和。当这两个值发生变化时,innerCount 会自动更新。

    • innerCount 实际上是 count + thisCount.value 的计算结果,这意味着它会实时反映父组件传递的 count 值和组件内 thisCount 变化后的总和。

🦋2.5 模板部分

<button @click="click">点击</button>
<div>计数:{{this.thisCount}}</div>
  • <button @click="click">点击</button>:按钮绑定了点击事件 click,每点击一次按钮,thisCount 就会加 1。
  • <div>计数:{{this.thisCount}}</div>:显示当前的 thisCount 值。这里使用了 {{ this.thisCount }},在模板中访问组件的响应式数据。注意,this.thisCount 在 Vue 3 中不常见,通常直接用 thisCount 即可,thissetup 中并不常用。

🦋2.6 组件注册和挂载

App.component("comp1", comp1)
App.mount("#Application")
  • App.component("comp1", comp1):将组件 comp1 注册为全局组件,允许我们在应用的任何地方使用 <comp1></comp1> 标签。
  • App.mount("#Application"):将 Vue 实例挂载到 DOM 元素 id="Application" 上。这样,Vue 会在这个容器内渲染 comp1 组件。

🔎3.代码运行时的展示效果

  1. 页面会渲染一个按钮,按钮上写着 “点击”。
  2. 页面下方会显示 “计数: 11”(这是 count 的初始值)。
  3. 每次点击按钮时,thisCount 会增加 1,计数会更新并显示在页面上。
  4. innerCount 计算属性会根据 countthisCount 的和动态更新,但它没有被直接渲染到模板中。

在这里插入图片描述

🔎4.总结

这段代码展示了 Vue 3 中组件的 props 使用、验证、以及响应式数据的操作,尤其是使用 Composition API 来管理组件的状态和逻辑。具体包括:

  1. Props 定义与验证:通过 props 选项定义了一个 count 属性,并添加了验证规则,确保传递给组件的 count 是一个大于 10 的数字。

  2. Composition API:

    • 使用 ref 创建响应式数据;
    • 使用 computed 创建计算属性;
    • setup() 函数中处理数据和方法。
  3. 模板渲染与事件绑定:模板中渲染了响应式数据,并通过点击事件更新数据,进而更新视图。

通过这些功能,Vue 3 提供了更加灵活、模块化的方式来构建和管理组件,使得开发者能够更清晰地组织代码和组件的逻辑。


http://www.kler.cn/a/526313.html

相关文章:

  • Deepseek技术浅析(二):大语言模型
  • Chrome浏览器编译系统研究与优化分析
  • 知识管理系统塑造企业文化与学习型组织的变革之路
  • Kubernetes 环境中的自动化运维实战指南
  • 【Leetcode刷题记录】166. 分数到小数
  • GSI快速收录服务:让你的网站内容“上架”谷歌
  • 文件上传2
  • vue3第三部分--组件通信
  • 【2024年华为OD机试】 (C卷,100分)- 最大括号深度(Java JS PythonC/C++)
  • python开发,最好的环境是什么
  • ThreadLocal源码解析
  • 5.3.2 软件设计原则
  • [JavaWeb]搜索表单区域
  • Windows11暂停自动更新
  • (二)PosrgreSQL: Python3 连接Pgvector出错排查
  • 巴塞尔问题详解:计算所有正整数平方的倒数之和
  • DeepSeek R1本地部署详细指南
  • Java 性能优化与新特性
  • [OO ALV] OO ALV 基础显示
  • allegro修改封闭图形线宽
  • 独立成分分析 (ICA):用于信号分离或降维
  • wordpress外贸独立站常用询盘软件
  • Rust语言进阶之enumerate用法实例(九十六)
  • 第33篇:Python开发进阶:自然语言处理与文本分析
  • Java继承中的静态方法隐藏与实例变量隐藏:深入解析与最佳实践
  • 年化19.3%策略集|ctpbee_api替换成openctp整合backtrader实盘方案(代码+数据)