Vue.js实践-组件基础上

一、选项式API和组合式API

1、基本概念

2、代码示例及演示效果

选项式API

复制代码
<template>
  <div>数字:{{ number }}</div>
  <button @click="addNumber">+1</button>
</template>
<script>
export default {
  data() { return { number: 1 } },
  methods: { addNumber() { this.number++ } }
}
</script>

组合式API

复制代码
<template>
  <div>数字:{{ number }}</div>
  <button @click="addNumber">+1</button>
</template>
<script setup>
import { ref } from 'vue'
let number = ref(1)
const addNumber = () => { number.value ++ }
</script>

效果和上面的选项是API 一样

二、生命周期函数

1、基本概念

什么是生命周期?

2、代码示例及演示效果

创建src\components\LifecycleHooks.vue文件,用于通过生命周期函数查看在特定时间点下的DOM元素。

复制代码
<template>  <div class="container">container</div> </template>
<script setup>
import { onBeforeMount, onMounted } from 'vue'
onBeforeMount(() => {
  console.log('DOM元素渲染前', document.querySelector('.container'))
})
onMounted(() => {
  console.log('DOM元素渲染后', document.querySelector('.container'))
})
</script>

三、组件的注册和引用

1、基本概念

为什么需要注册组件

1.1、全局注册

1.2、局部注册

1.3、注意

2、引用组件

2.1基本概念

3、代码示例演示效果

创建src\components\GlobalComponent.vue文件,表示全局组件。

复制代码
<template>
  <div class="global-container"><h5>全局组件</h5></div>
</template>
<style>
.global-container {
  border: 1px solid black;
  height: 50px;
  flex: 1;
}
</style>

创建src\components\LocalComponent.vue文件,表示局部组件。

复制代码
<template>
  <div class="local-container">
    <h5>局部组件</h5>
  </div>
</template>
<style>
.local-container {
  border: 1px dashed black;
  height: 50px;
  flex: 1;
}
</style>

创建src\components\ComponentUse.vue文件。 该文件用于使用组件进行演示

复制代码
<template>
  <h5>父组件</h5>
  <div class="box">
       <GlobalComponent />
  <LocalComponent />

  </div>
</template>
<style>
.box {
  display: flex;
}
</style>
<!-- 注册局部组件 -->
<script setup>
import LocalComponent from './LocalComponent.vue'
</script>

修改src\main.js文件,导入GlobalComponent组件并调用component()方法全局注册GlobalComponent组件。

复制代码
import './style.css'
import ComponentUse from './components/ComponentUse.vue'
import GlobalComponent from './components/GlobalComponent.vue'
const app = createApp(ComponentUse)
app.component('GlobalComponent', GlobalComponent)
app.mount('#app')

演示效果

四、解决组件之间的样式冲突

1、基本概念

2、代码示例

2.1 scoped属性解决样式冲突

复制代码
<template>
  <h5>父组件</h5>
  <div class="box">
       <GlobalComponent />
  <LocalComponent />

  </div>
</template>
<style scoped>
.box {
  display: flex;
}
h5 {
  border: 5px dotted black;
}

</style>
<!-- 注册局部组件 -->
<script setup>
import LocalComponent from './LocalComponent.vue'
</script>

2.2 深度选择器解决样式冲突

复制代码
<template>
  <h5>父组件</h5>
  <div class="box">
       <GlobalComponent />
  <LocalComponent />

  </div>
</template>
<style scoped>
.box {
  display: flex;
}
h5 {
  border: 5px dotted rgb(221, 6, 6);
}

:deep(.title){
  border: 3px dotted rgb(208, 13, 13);
}


</style>
<!-- 注册局部组件 -->
<script setup>
import LocalComponent from './LocalComponent.vue'
</script>

五、父组件向子组件传递数据

1、静态绑定porps代码及演示效果

父组件代码

复制代码
<template>
<!-- 使用局部组件,并且向局部组件的num传递数据 -->
  <Count num="1" />
</template>
<script setup>
// 注册局部组件
import Count from './Count.vue'
</script>

子组件代码

复制代码
<template>
  初始值为:{{ num }}
</template>
<script setup>
const props = defineProps({
  num: String
})

</script>

main.js 切换演示

复制代码
import Props from './components/Props.vue'
 createApp(Props).mount('#app')

2、动态绑定porps代码及演示效果

父组件代码

复制代码
<template>
  <Child :init="username" />
</template>
<script setup>
import Child from './Child.vue'
import { ref } from 'vue'
const username = ref('小圆')
</script>

子组件代码

复制代码
<template></template>
<script setup>
const props = defineProps(['init'])
console.log(props)
</script>

main.js 切换演示

复制代码
import father from './components/father.vue'
 createApp(father).mount('#app')

3、基本概念

相关推荐
甄心爱学习2 小时前
【项目实训】法律文书智能摘要系统3
前端·人工智能
冲浪中台2 小时前
从追逐技术到回归业务本质,吃互联网红利罢了
服务器·前端·人工智能·低代码
小马_xiaoen2 小时前
前端虚拟列表(Virtual List)从原理到实战:海量数据渲染终极方案
前端·数据结构·list
M ? A2 小时前
你的 Vue 3 响应式状态,VuReact 如何生成 React Hooks 依赖数组?
前端·javascript·vue.js·经验分享·react.js·面试·vureact
FlyWIHTSKY2 小时前
HTML 中 `<span>` 和 `<div>` 详细对比
前端·html
competes2 小时前
React.js JavaScript前端技术脚本运行框架。程序员进行研发组项目现场工作落地的一瞬之间适应性恒强说明可塑性强度达到应用架构师的考核标准
前端·javascript·人工智能·react.js·java-ee·ecmascript
2401_832635583 小时前
踩坑分享IntelliJ IDEA 打包 Web 项目 WAR 包(含 Tomcat 部署 + 常见问题解决)
前端·tomcat·intellij-idea
Evavava啊3 小时前
Android WebView 中 React useState 更新失效问题
android·前端·react.js·渲染
恋恋风尘hhh3 小时前
Web 端请求签名机制分析:以小红书(XiaoHongShu)x-s 参数为例
前端