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

Vue3 从入门到放弃 (第四篇.Props使用)

我们接着上节文章 (Vue3 从入门到放弃 (第三篇.组件的使用)_Meta.Qing的博客-CSDN博客)

我们来实现props使用和注意事项.

Props 声明

在使用 <script setup> 的单文件组件中,props 可以使用 defineProps() 宏来声明

1.字符串数组来声明 props

<script setup>
const props = defineProps(['foo'])

console.log(props.foo)
</script>

2.对象实现props

// 使用 <script setup>
defineProps({
  title: String,   //类型可以为String,Number,Function,Array,Boolean,Object
  likes: Number    
})

如果你正在搭配 TypeScript 使用 <script setup>,也可以使用类型标注来声明 props:

<script setup lang="ts">
defineProps<{
  title?: string
  likes?: number
}>()
</script>

3 .使用 camelCase 形式,因为它们是合法的 JavaScript 标识符,可以直接在模板的表达式中使用,也可以避免在作为属性 key 名时必须加上引号

defineProps({
  greetingMessage: String
})
<span>{{ greetingMessage }}</span>

虽然理论上你也可以在向子组件传递 props 时使用 camelCase 形式 (使用 DOM 模板时例外),但实际上为了和 HTML attribute 对齐,我们通常会将其写为 kebab-case 形式:

<MyComponent greeting-message="hello" />

静态 vs. 动态 Prop

至此,你已经见过了很多像这样的静态值形式的 props:

<BlogPost title="My journey with Vue" />

应地,还有使用 v-bind 或缩写 : 来进行动态绑定的 props:

<!-- 根据一个变量的值动态传入 -->
<BlogPost :title="post.title" />

<!-- 根据一个更复杂表达式的值动态传入 -->
<BlogPost :title="post.title + ' by ' + post.author.name" />

 继续上节例子:

<script setup>
// 声明一个props,默认值为default
defineProps({
  titleHeader: {
    type: String,
    default: 'Meta.Qing'
  }
})

</script>

<template>
  <!-- 定义一个头部组件 -->
  <div class="meta-header">
    <!-- 左侧logo -->
    <div class="meta-header-logo">{{ titleHeader }} LOGO</div>
    <nav>
      <!-- 右侧导航栏 -->
      <a href="/HTML/">HTML</a> | <a href="/css/">CSS</a> |
      <a href="/JavaScript/">JavaScript</a> | <a href="/jQuery/">jQuery</a> |
      <a href="/Vue3/">Vue3</a> | <a href="/React/">React</a> |
      <a href="/Angular/">Angular</a>
    </nav>
  </div>
</template>

<style scoped>
/* 弹性盒子方式来布局 */
.meta-header {
  display: flex;
  width: 100%;
  justify-content: space-between;
  background: #1fd6e766;
  padding: 10px;
}
.meta-header-logo {
  font-weight: bold;
  color: rgba(28, 29, 31, 0.804);
}
</style>

打开 http://127.0.0.1:5173/#/ 

 

相关文章:

  • 有趣的java面试题-基础篇(一)
  • 用Windows性能监视器分析网站运行状况
  • Ubuntu 安装 GDAL C++库
  • 文件中的关键字与对应的协议
  • 应对反爬虫策略分享
  • 专利申请预审需要满足什么条件?
  • HTML5新特性 day_04(8.10)地图、文件上传
  • Junit5 + YAML 轻松实现参数化和数据驱动(一)
  • 用ARM进行汇编语言编程(1)介绍与寻址模式
  • PostwomanApi接口测试工具
  • 如何将数据输入神经网络,神经网络的数据处理
  • 数据结构-红黑树
  • 2022年下半年软考报名时间汇总,最新版!
  • Div4 思维总结
  • Docker面试题库
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • eclipse的离线汉化
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • java2019面试题北京
  • Laravel Telescope:优雅的应用调试工具
  • leetcode386. Lexicographical Numbers
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • RxJS: 简单入门
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 简析gRPC client 连接管理
  • 理清楚Vue的结构
  • 力扣(LeetCode)22
  • 实现简单的正则表达式引擎
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # 计算机视觉入门
  • #AngularJS#$sce.trustAsResourceUrl
  • #pragma pack(1)
  • $(selector).each()和$.each()的区别
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (理论篇)httpmoudle和httphandler一览
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)ABI是什么
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET MVC第三章、三种传值方式
  • .NET 使用配置文件
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET委托:一个关于C#的睡前故事
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • [acwing周赛复盘] 第 69 场周赛20220917
  • [C++]:for循环for(int num : nums)
  • [C++核心编程](四):类和对象——封装
  • [DAX] MAX函数 | MAXX函数
  • [Hive] 常见函数
  • [J2ME]如何替换Google Map静态地图自带的Marker
  • [Java][Android][Process] ProcessBuilder与Runtime差别
  • [NKCTF 2024]web解析