Vue3 中的 Props用法:父子组件通信的核心机制

【Vue3进阶】组件通信进阶使用方法——defineProps、defineExpose、defineEmits 本文详细介绍了Vue 3中组件间通信的三种主要方式:父组件向子组件传递数据的`defineProps`、子组件向父组件暴露属性和方法的`ref+defineExpose`以及子组件向父组件传递事件的`defineEmits`。`defineProps`允许子组件以类型安全的方式接收来自父组件的数据。`ref+defineExpose`则使得父组件能够通过`ref`访问子组件中明确暴露的属性和方法,增强了组件间的交互性。而`defineEmits`则为子组件提供了一种机制,使其能够触发事件并将数据发送 阅读详情
AI摘要

本文深入讲解Vue3中props的用法,涵盖基础声明与传递、类型验证、默认值、TypeScript支持及单向数据流原理,并结合待办事项列表实战案例,帮助开发者掌握组件间高效、安全的数据通信机制。

在 Vue3 中,​​props(属性)​​ 是父组件向子组件传递数据的​​单向通信机制​​,遵循“父→子”的数据流向,是组件复用和模块化的基础。子组件通过声明 props 接收外部数据,父组件通过属性绑定(v-bind 或简写 :)传递数据,确保组件状态的清晰和可控。

一、基础用法:从声明到使用

1. 子组件声明Props

Vue3 提供了两种声明 props 的方式,其中​​<script setup> 语法糖​​是最推荐的(更简洁、更符合 Composition API 风格)。

  • ​​数组形式​​(简单场景):仅声明 prop 名称,适用于不需要复杂配置的场景。
    // ChildComponent.vue(使用<script setup>)
    const props = defineProps(['title', 'count']) // 声明接收 title(String)和 count(Number)两个 props
  • ​​对象形式​​(推荐,复杂场景):可配置类型、默认值、必填性等,适用于需要严格验证的场景。
    const props = defineProps({
      title: {
        type: String,          // 类型:字符串
        required: true,        // 必填
        default: '默认标题'    // 默认值(非必填时生效)
      },
      count: {
        type: Number,          // 类型:数字
        default: 0             // 默认值
      }
    })

2. 父组件传递Props

父组件通过​​属性绑定​​将数据传递给子组件,支持​​静态值​​和​​动态数据​​:

  • ​​静态传递​​:直接写死值(适用于固定数据)。
    <!-- ParentComponent.vue -->
    <template>
      <ChildComponent title="静态标题" :count="10" />
    </template>
  • ​​动态传递​​:绑定父组件的 data 或 computed 属性(适用于变化数据)。
    <template>
      <ChildComponent :title="parentTitle" :count="parentCount" />
    </template>
    <script setup>
    import { ref } from 'vue'
    import ChildComponent from './ChildComponent.vue'
    
    const parentTitle = ref('动态标题') // 父组件 data
    const parentCount = ref(5)         // 父组件 data
    </script>

3. 子组件使用Props

子组件通过​​模板​​或​​script​​访问 props:

  • ​​模板中直接使用​​(最常见):
    <template>
      <div>
        <h3>{{ title }}</h3>
        <p>数量:{{ count }}</p>
      </div>
    </template>
  • ​​script 中通过 props 访问​​(适用于逻辑处理):
    const props = defineProps(['title'])
    console.log('标题是:', props.title) // 输出父组件传递的 title

二、高级配置:类型验证与默认值

1. 类型验证

通过 type 属性指定 prop 的类型,Vue3 会在开发模式下检查类型是否匹配,不匹配则抛出警告。支持的类型包括:

  • 原生类型:String、Number、Boolean、Array、Object、Function、Symbol
  • 自定义类:通过 instanceof 检查(如 type: Person,需提前定义 Person 类)
const props = defineProps({
  name: String,                  // 字符串
  age: Number,                   // 数字
  isActive: Boolean,             // 布尔值
  hobbies: Array,                // 数组
  profile: Object,               // 对象
  callback: Function,            // 函数
  id: Symbol                     // Symbol
})

2. 默认值与必填性

  • ​​默认值​​:通过 default 属性设置,当父组件未传递该 prop 时生效。
    • 基本类型(String、Number 等):直接赋值。
      const props = defineProps({
        count: { type: Number, default: 0 } // 默认值为 0
      })
    • 对象/数组:必须使用​​工厂函数​​返回(避免多个组件实例共享同一引用)。
      const props = defineProps({
        user: { 
          type: Object, 
          default: () => ({ name: '匿名用户', age: 18 }) 
        },
        tags: { 
          type: Array, 
          default: () => ['vue', 'javascript'] 
        }
      })
  • ​​必填性​​:通过 required 属性设置,未传递则抛出警告。
    const props = defineProps({
      title: { type: String, required: true } // 必须传递 title
    })

3. 自定义验证函数

通过 validator 函数实现更复杂的验证逻辑(如值的范围、格式等)。函数接收 prop 值作为参数,返回 true(有效)或 false(无效),无效时会抛出警告。

const props = defineProps({
  age: {
    type: Number,
    validator(value) {
      return value >= 0 && value <= 150 // 年龄必须在 0-150 之间
    }
  },
  status: {
    validator(value) {
      return ['active', 'inactive', 'pending'].includes(value) // 状态必须是这三个值之一
    }
  }
})

三、TypeScript 支持:类型安全的Props

Vue3 对 TypeScript 的支持极大提升了 props 的类型安全性。通过泛型和 PropType 工具,可以定义更精确的 props 类型。

1. 使用泛型定义Props

在 <script setup lang="ts"> 中,通过泛型参数指定 props 的类型:

<script setup lang="ts">
interface User {
  name: string
  age: number
}

const props = defineProps<{
  user: User       // 必填,类型为 User 接口
  theme?: string   // 可选,类型为 string
}>()
</script>

2. 使用 PropType 定义复杂类型

对于自定义类或更复杂的类型,使用 PropType 工具:

<script setup lang="ts">
import { PropType } from 'vue'

interface Book {
  name: string
  author: string
}

const props = defineProps({
  book: {
    type: Object as PropType<Book>, // 指定为 Book 类型
    required: true
  },
  onUpdate: {
    type: Function as PropType<(id: number) => void>, // 指定为函数类型
    required: true
  }
})
</script>

四、单向数据流:为什么不能直接修改Props?

Vue3 的​​单向数据流​​原则要求:父组件通过 props 向子组件传递数据,子组件不能直接修改 props。这一设计的目的:

  • ​​避免数据混乱​​:如果多个子组件修改同一个 prop,会导致数据来源难以追踪。
  • ​​提高可维护性​​:数据变更的路径清晰(父→子),便于调试和维护。

错误示例:直接修改 props

const props = defineProps(['count'])
const increment = () => {
  props.count++ // ❌ 警告:Avoid mutating a prop directly
}

正确做法:通过事件通知父组件

子组件通过 $emit 触发自定义事件,父组件监听事件并修改数据。

<!-- 子组件 ChildComponent.vue -->
<template>
  <button @click="increment">+1</button>
</template>
<script setup>
const props = defineProps(['count'])
const emit = defineEmits(['increment']) // 定义 increment 事件

const increment = () => {
  emit('increment') // 触发 increment 事件
}
</script>
<!-- 父组件 ParentComponent.vue -->
<template>
  <ChildComponent :count="parentCount" @increment="handleIncrement" />
</template>
<script setup>
import { ref } from 'vue'
import ChildComponent from './ChildComponent.vue'

const parentCount = ref(0)

const handleIncrement = () => {
  parentCount.value++ // 父组件修改数据
}
</script>

五、实战案例:待办事项列表组件

场景描述

创建一个​​待办事项列表​​组件,接收待办事项数组(todos)和主题颜色(theme),支持添加和删除待办事项。

代码实现

1. 子组件:TodoList.vue
<template>
  <div :class="['todo-list', theme]">
    <h3>{{ title }}</h3>
    <ul>
      <li v-for="(todo, index) in todos" :key="index">
        {{ todo.text }}
        <button @click="deleteTodo(index)">删除</button>
      </li>
    </ul>
    <input v-model="newTodo" placeholder="添加新待办" />
    <button @click="addTodo">添加</button>
  </div>
</template>
<script setup lang="ts">
import { ref, defineProps, defineEmits } from 'vue'

interface Todo {
  text: string
  completed: boolean
}

const props = defineProps<{
  todos: Todo[]    // 待办事项数组
  title?: string   // 标题(可选)
  theme?: string   // 主题(可选)
}>()

const emit = defineEmits<{
  'update:todos': [todos: Todo[]] // 更新待办事项的事件
}>()

const newTodo = ref('')
const addTodo = () => {
  if (newTodo.value.trim()) {
    const updatedTodos = [...props.todos, { text: newTodo.value, completed: false }]
    emit('update:todos', updatedTodos) // 触发更新事件
    newTodo.value = ''
  }
}

const deleteTodo = (index: number) => {
  const updatedTodos = props.todos.filter((_, i) => i !== index)
  emit('update:todos', updatedTodos) // 触发更新事件
}
</script>
<style scoped>
.todo-list {
  padding: 20px;
  border-radius: 8px;
  margin: 10px;
}
.light { border: 2px solid #ccc; background: #fff; }
.dark { border: 2px solid #333; background: #f5f5f5; color: #333; }
</style>
2. 父组件:App.vue
<template>
  <div>
    <h1>待办事项列表</h1>
    <TodoList 
      :todos="todos" 
      title="我的待办" 
      theme="light"
      @update:todos="updateTodos" 
    />
  </div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import TodoList from './components/TodoList.vue'

const todos = ref([
  { text: '学习 Vue3', completed: false },
  { text: '写一个待办应用', completed: false }
])

const updateTodos = (newTodos: any[]) => {
  todos.value = newTodos // 更新父组件的 todos 数据
}
</script>

六、最佳实践

1. 命名规范

  • ​​props 定义​​:使用 camelCase(如 userName),符合 JavaScript 变量命名习惯。
  • ​​模板传递​​:使用 kebab-case(如 user-name),因为 HTML 属性不区分大小写。
    <!-- 父组件模板 -->
    <ChildComponent :user-name="name" />

2. 单向数据流

始终通过事件通知父组件修改数据,避免直接修改 props。例如,子组件中需要修改 props 时,使用 emit 触发事件,父组件监听事件并更新数据。

3. 类型安全(TypeScript)

使用 TypeScript 定义 props 类型,提高代码的可维护性和健壮性。例如,通过泛型和 PropType 定义复杂类型,避免类型错误。

4. 性能优化

  • ​​避免大型对象​​:不要通过 props 传递大型对象(如包含大量数据的数组),会增加组件渲染成本。
  • ​​使用 v-once​​:如果 props 数据不会变化,使用 v-once 指令优化渲染性能。
    <ChildComponent :user="staticUser" v-once />

记住:props 是父子组件通信的基础,合理使用能让你的组件更清晰、更易维护。

vue中组件的props属性(详) 今天这篇文章,让你彻底学会props属性…… props主要用于组件的传值,他的工作就是为了接收外面传过来的数据,与data、el、ref是一个级别的配置项。 阅读详情

相关推荐

Vue 3 组件通信全解析:从 Props 到 Pinia 的深入实践

Vue 3 作为现代前端框架的代表之一,以其灵活性和高效性受到开发者的广泛喜爱。在 Vue 3 中,组件是构建用户界面的核心单元,而组件之间的通信则是实现动态交互和数据流动的关键环节。无论是简单的父子组件通信,还是复杂的跨组件数据共享,Vue 3 提供了多种方式来满足不同的开发需求。本文将深入探讨 Vue 3 中的组件通信机制,包括 Props、Emits、Slots、Provide/Inject、Event Bus 和状态管理工具(如 Pinia),并通过一个实践案例加以说明,最后介绍如何将 Vue 应用

zimin的专栏 1884

Vue3——第十二章(Props)

Vue3——第十二章(Props)

why404 2万+

Vue父子组件通信案例详解

本文还有配套的精品资源,点击获取 简介:Vue.js 是一个流行的前端框架,以组件化开发为核心。在“Vue父子组件通信案例”中,我们将详细学习Vue 2.x版本中父子组件的通信机制,包括数据如何从父组件传递到子组件,以及子组件如何向父组件发送数据。本案例中,我们将看到在子组件中定义和接收props,以及父组件如何绑定这些props。此外,还会探讨子组件通过 $emi...

weixin_29859471的博客 1237

详细分析Vue3中的props用法(父传子)

在 Vue 3 中,父组件可以通过 props 向子组件传递数据 子组件通过 defineProps 或 props 来定义它接收的属性 这些属性在子组件中可以直接使用

码农研究僧的博客 3万+

(一篇即成功)Ubuntu下搭建qt环境和安装Qt Creator

只需一篇就成功搭建Ubuntu下的QT环境 你还在等什么

m0_73450461的博客 1万+

华为模拟器eNSP练习题 - HCIA综合实验

华为模拟器eNSP练习题 - HCIA综合实验 题目要求 ISP路由器只能配置IP地址,之后不得进行其他任何配置; 整个内部网络基于192.168.1.0/24进行地址规划; R1/R2之间启动OSPF协议,单区域; PC1-PC4自动获取IP地址; PC1不能telnet R1,PC1外的其他内网pc可以; PC1-PC4可以访问PC5,R2的公网接口只拥有一个公有IP12.0.0.1; 外部的client可以通过域名www.ensp.com访问http server; ISP路由telnet 12.0

炸鸡店老板z的博客 9867

vue3 props属性基本使用梳理

vue3 props属性基本使用梳理

weixin_41897680的博客 2万+

gm/Id 设计方法

本文介绍gm/Id方法的具体实现。

maxwell2ic的博客 4万+

Vue父子组件通信实战:Props与$emit详解

组件通信是Vue开发中的核心概念,通过Props实现父向子数据传递,利用$emit完成子向父事件通知。这种单向数据流机制既保证了组件独立性,又实现了数据协同。在工程实践中,合理使用类型检查、事件验证等特性可以显著提升代码健壮性。特别是在电商、后台管理系统等业务场景中,父子组件通信模式能高效解决商品展示、表单交互等典型需求。本文结合Vue 2/3特性差异,深入讲解props验证、v-model原理、Event Bus等实用方案,帮助开发者规避数据流混乱、内存泄漏等常见问题。

weixin_30402231的博客 181

基于Python的专利数据爬虫开发指南:从入门到实战

本文将详细介绍如何使用Python开发一个高效的专利数据爬虫系统,涵盖最新技术栈如Playwright、异步IO、反反爬策略等。文章包含完整代码实现、性能优化技巧及法律合规建议,帮助读者构建可投入生产的专利数据采集解决方案。专利数据是技术创新的重要指标,包含技术细节、申请人信息、法律状态等宝贵信息。企业竞争情报分析技术趋势预测研发方向决策知识产权战略制定。

2201_76125261的博客 1588

cdk&java | 分子sdf文件生成

sdf

ASKCOS博客 1089

Vue3组件通信零基础入门:从hello world到实战

记住,props是父传子的单向数据流,emit是子传父的事件通知,掌握好这两个核心概念,就能构建出各种复杂的组件交互了。父组件则需要在子组件标签上监听这个事件,并绑定对应的处理方法。比如一个计数器组件,父组件传递初始值给子组件显示,子组件有两个按钮分别控制增加和减少,每次点击都会通知父组件更新数据。在父组件中,我们只需要在模板中使用子组件标签时,通过属性绑定的方式传递数据。这样,父组件的数据就能在子组件中使用了。今天想和大家分享一下Vue3中组件通信的基础知识,特别是父子组件之间的传值方法。

StarfallRaven13的博客 86

人工智能在文学领域的应用:创作无限可能的智能作家

人工智能在文学领域的应用:创作无限可能的智能作家 作者:禅与计算机程序设计艺术 1. 背景介绍 人工智能技术近年来飞速发展,在各个领域都有广泛应用。文学创作作为人类最高级的智力活动之一,也逐渐受到人工智能技术的影响和改变。随着自然语言处理、生成式模型等人工智能

AI天才研究院 1110

Vue 组件通信核心机制:父子组件传值的六种实现方式

本文深度解析了 Vue 框架中父组件向子组件传递数据的六种核心方式,涵盖 Prop 传递、$emit 自定义事件、v-model 双向绑定、Provide/Inject 跨层级注入、ref 直接调用以及 $attrs/$listeners 透传。通过具体的代码示例与 Mermaid 流程图,帮助开发者彻底掌握组件通信的精髓。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 712

使用 MATLAB/Simulink 构建一个基于FOC控制的PMSM矢量控制仿真模型

本教程详细介绍了基于MATLAB/Simulink的永磁同步电机(PMSM)磁场定向控制(FOC)系统建模与仿真方法。主要内容包括:PMSM电机模型参数设置、Clarke/Park变换模块设计、电流环PID控制器配置、SVPWM调制实现以及系统仿真参数优化。文章提供了模块化设计思路和具体参数设置示例,并给出了PID整定建议和进阶优化方向。通过该仿真模型,可深入理解PMSM矢量控制原理,掌握高性能电机控制系统的建模技巧,适用于伺服系统、电动汽车驱动等高端控制场景。教程还推荐了实时仿真和高级控制策略等扩展应用。

xiaoheshang_123的博客 528

UEFI 基础教程 (零) - 目录

UEFI 基础教程 (十八) — UEFI Build Process简单分析。UEFI 基础教程 (十五) — 获取UEFI MemoryMap。UEFI 基础教程 (六)   —  PROTOCOL 简单使用。UEFI 基础教程 (十)   —  FileIO 简单使用。UEFI 基础教程 (一)   —  搭建UEFI开发环境。UEFI 基础教程 (九)   —  EVENT 简单使用。UEFI 基础教程 (七)   —  HOB 简单使用。UEFI 基础教程 (八)   —  PCD 简单使用。..

技术联盟 1536

Vue3组件通信精讲:useAttrs与props的核心区别与实战选型

本文对比了Vue3中props与useAttrs两种组件通信方式的核心差异。props需要显式声明,支持类型校验和深层响应性,适合核心业务数据传递;useAttrs自动捕获未声明属性,包含事件处理函数,适合属性透传和组件封装场景。文章详细分析了两者的响应性机制,props采用深层代理而useAttrs是浅层响应,并提供了组合使用的实战技巧。关键避坑指南包括:避免直接解构useAttrs导致响应性丢失,注意同名属性优先级问题,以及class/style的特殊处理。

2459

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

详细分析 Vue3 中的 props 用法,Vue 中页面之间的传值方法有哪些?

在Vue3的开发中,props是父组件与子组件之间通信的核心机制,主要用于父组件向子组件传递数据。虽然看起来简单,但props在实际项目中涉及多种场景和细节。本文将从基础到进阶,详细讲解props的使用方法,并提供代码示例和实战案例,帮助小白开发者轻松上手 Vue3 的props。props本文从基础到进阶,详细讲解了 Vue3 中props的用法。通过这些示例,相信你已经对props的功能和使用场景有了全面了解。无论是简单传值还是复杂传递,都可以使用props轻松实现父组件与子组件的数据通信。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Vue父子组件间通信:Props与$emit的用法

父组件:直接引入并包裹子组件的组件。子组件:被父组件通过标签形式调用的组件。父 → 子 -----------Props -----------初始化数据传递。子 → 父 --------$emit + @ --------子组件操作反馈。

Lthan7的博客 1298

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Vue 2 与 Vue 3 中父子组件及兄弟组件的通信方式

Vue.js 组件通信方式总结 本文详细介绍了 Vue 2 和 Vue 3 中父子组件及兄弟组件的通信方式: 父子组件通信 父传子: 使用 props 传递数据(单向数据流) Vue 2/Vue 3 实现方式基本一致 子传父: 使用 $emit 触发事件 通过 ref 直接访问子组件实例 两种框架实现方式相似 兄弟组件通信 通过父组件中转(使用 props + $emit) 使用 Event Bus(Vue 2 通过 Vue 实例,Vue 3 需引入 mitt 等库) 使用 Vuex/Pinia 状态管理(

你若盛开,清风自来 1939

Vue 3 中父子组件之间如何进行相互通信?

父子组件通信,作为Vue应用开发中不可或缺的一部分,是实现数据流动、事件触发以及组件间互动的关键机制。无论是简单的属性传递,还是复杂的交互逻辑,掌握这一技能对于构建富有层次感和互动性的用户界面至关重要。通过学习如何有效地利用props进行数据下行传递,使用emit触发自定义事件,以及借助ref直接操作子组件。本文将详细探讨Vue 3中的父子组件通信,帮助你深入了解并掌握这些核心概念。子组件与父组件通信的主要方式之一是通过emit触发自定义事件。当子组件想要通知父组件某个特定事件发生时,它可以调用emit。

qq_66118130的博客 1151

Vue 组件通信全面解析

在 Vue 开发中,组件通信是一个重要的核心问题。随着应用复杂度的增加,如何在组件之间有效传递数据、触发事件,直接影响代码的可维护性和可扩展性。Vue 提供了多种组件通信方式,每种方式都适合不同的使用场景。本文将系统性解析这些通信方式,从到,全面覆盖。

DeL的博客 3136

vue3和vue2父子组件互相通信的方式和原理

在Vue框架中,父子组件之间的数据传递是一个核心功能,它允许组件之间进行有效的通信和数据共享。随着Vue 3的发布,父子组件之间的传值方式发生了一些变化,同时也带来了一些新的特性和改进。本文将详细总结Vue 3与Vue 2在父子组件传值方面的区别和原理。

qq_37485170的博客 1206

深入了解 Vue 3 组件间通信机制

深入了解 Vue 3 组件间通信机制

赵士杰——成功并非一蹴而就,而是在持之以恒的努力中逐渐实现。 1755

Vue的父子组件通信问题

在 Vue 中,父子组件的通信是组件间数据传递的核心机制之一。:父组件通过插槽向子组件传递内容(HTML 或组件),子组件定义插槽位置。根据具体需求选择最适合的通信方式,保持代码的可维护性和可读性。:子组件通过自定义事件向父组件发送消息,触发父组件的方法。

m0_74374651的博客 1229

Vue3 中父子组件传参是组件通信的核心场景,需遵循「父传子靠 Props,子传父靠自定义事件」的原则,以下是资料总结

本文详细介绍了Vue3中父子组件通信的四种方式:1)父组件通过Props向子组件传参(单向数据流);2)子组件通过自定义事件向父组件传值;3)使用v-model实现双向绑定(Props+事件的语法糖);4)通过ref和expose访问组件实例(应急方案)。文章分别阐述了组合式API和选项式API的实现方式,强调了单向数据流原则和最佳实践,建议优先使用Props+自定义事件,避免直接修改Props或过度依赖实例访问。对于复杂场景,推荐使用状态管理工具而非多层组件通信。

SSHLY3的博客 1289
上一篇: Vue语法糖写法大全
下一篇: Vue 中 Mitt 事件总线的完整教程
Rysxt
博客等级 码龄8年 9478粉丝 392原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值