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

vue3 组合式API

<!-- 深度监听  deep 点击按钮控制台,才输出count变化了: 1, 老值: 0;否则控制台不输出 -->
<script setup>import { ref,watch } from 'vue'const state = ref({count:0})const setCount = () => {state.count.value++}watch(state, () => {console.log(`count变化了: ${newValue}, 老值: ${oldValue}`)},{deep:true})
</script><template><div><button @click="setCount">count is: {{ state.count }}</button></div>
</template>

setup 语法糖 (API入口)

 <script setup>// 数据const message = 'this is ms'// 函数const logMessage = () =>{console.log(message);}</script><template><div>{{ message }}</div><button @click="logMessage ">log</button>
</template>

ref和 reactive的用法   

共同点: 用函数调用的方式生成响应式数据

不同点: reactive: 只支持对象类型的数据

               ref: 可以支持简单类型和对象类型的数据, 在脚本区域修改ref产生的响应式对象数据,必须通过value属性,来获取。

<script setup>
// 用ref和reactive 共同点。用函数调用的方式生成响应式数据
// 1.导入函数
// import { reactive } from 'vue';
// // 只支持对象类型
// const state = reactive({
//   count:0// })// // 定义一个函数// const setCount =()=>{
//   state.count++ 
// }import { ref } from 'vue';const state = ref(0)
const setCount =() =>{// 在脚本区域修改ref产生的响应式对象数据,必须通过value属性state.value++
}
</script><template><!-- <button @click="setCount">{{ state.count }}</button> -->
<button @click="setCount">{{ state }}</button></template>

计算属性computed

<script setup>
// 原始响应式数据
import { ref } from 'vue';
// 导入computed
import {computed} from 'vue';
const list = ref([1,2,3,4,5,6,7,8])
// 执行函数 return 计算之后的值,变量接收const computedList  = computed(() =>{// 计算属性中不应该有副作用(比如异步请求,修改dom)// 避免直接修改计算属性的值(计算属性应该是只读的)return list.value.filter(item => item > 2)
})setTimeout(()=>{list.value.push(9,10)
},3000)
</script><template><div>原始响应式数组 - {{ list }}</div><div>计算属性数组 - {{ computedList }}</div>
</template>

watch基本使用

<script setup>import { ref,watch } from 'vue'
const count = ref(0)
// 监听count的变化
// watchAPI,ref对象不需要加.value
watch(count, (newValue, oldValue) => {console.log(`new: ${newValue}, old: ${oldValue}`)
})
</script>  <template><h1>{{ count }}</h1><button @click="count++">count is: {{ count }}</button>
</template>
 监听多个数据源
<script setup>import { ref,watch } from 'vue'const count = ref(0)
const name = ref('zhangsan')
const changeCount = () => {count.value++
}
const changeName = () => {name.value = 'lisi'
}// 监听多个数据源
watch([count,name],([newCount,newName],[oldCount,oldName])=>{console.log(`newCount: ${newCount}, oldCount: ${oldCount}`)console.log(`newName: ${newName}, oldName: ${oldName}`)}
)
</script><template><div><button @click="changeCount">count is: {{ count }}</button></div><div><button @click="changeName">name is: {{ name }}</button></div></template>
 立即执行

<!-- 立即执行的watchAPI  immidiate -->
<!-- 默认浅层监听   --><script setup>import { ref,watch } from 'vue'const count = ref(0)const setCount = () => {count.value++}watch(count, (newValue, oldValue) => {console.log(`new: ${newValue}, old: ${oldValue}`)},{immediate:true})
</script><template><div><button @click="setCount">count is: {{ count }}</button></div>
</template> 
 深度执行
<script setup>import { ref,watch } from 'vue'const state = ref({count:0})const setCount = () => {state.count.value++}watch(state, () => {console.log(`count变化了: ${newValue}, 老值: ${oldValue}`)},{deep:true})
</script><template><div><button @click="setCount">count is: {{ state.count }}</button></div>
</template>
精确侦听 
<!-- 精确侦听对象的某个属性 --><!-- 在不开启deep的情况下,监听age的变化,只有age变化时才会执行回调 --><script setup>import { ref,watch } from 'vue'const state = ref({name:'asdas',age:10})const changeName = () => {state.value.name = 'children'}const changeAge = () => {state.value.age = 20}//  精确侦听某个具体属性 侦听agewatch(() => state.value.age,() => {console.log('age变化了')}) 
</script><template><div><div>当前name == {{ state.name }}</div><div>当前age == {{ state.age }}</div><div><button @click="changeName">修改name</button><button @click="changeAge">修改age</button></div></div></template>

生命周期API

<script setup>
import { onMounted } from 'vue';onMounted(() => {console.log('1.组件挂载完毕mounted执行了');
}) 
onMounted(() => {console.log('2.组件挂载完毕mounted执行了');
}) 
</script><template></template>

组合式API下的父传子(转到 父传子 内容)

基本思想:

1. 父组件中给子组件绑定属性

2. 子组件内部通过props 选项接收

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【大数据】基础认知入门
  • 嵌入式开发就业方向有哪些?前景未来可期!
  • transformer-explainer
  • laravel 大数据分块导出,避免内存溢出
  • 【Python】生成二维迷宫的算法
  • C语言---栈
  • 【Unity基础】Unity中的Tag、Layer和Sorting Layer
  • 【Linux】1.Linux环境搭建
  • C语言 | Leetcode C语言题解之第354题俄罗斯套娃信封问题
  • 深入探讨 Nginx:安装、配置及优化指南
  • 2024.08.13 校招 实习 内推 面经
  • 插屏广告在游戏APP中广告变现的独特优势
  • Readiness Probe可以解决应用启动慢造成访问异常的问题。
  • 配置主从mysql服务器
  • AcWing848有向图的拓扑排序
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • [译] 怎样写一个基础的编译器
  • axios 和 cookie 的那些事
  • es6--symbol
  • JAVA SE 6 GC调优笔记
  • JavaScript函数式编程(一)
  • Java精华积累:初学者都应该搞懂的问题
  • Java知识点总结(JavaIO-打印流)
  • mysql_config not found
  • RxJS: 简单入门
  • 从tcpdump抓包看TCP/IP协议
  • 基于webpack 的 vue 多页架构
  • 经典排序算法及其 Java 实现
  • 力扣(LeetCode)56
  • 每天10道Java面试题,跟我走,offer有!
  • 普通函数和构造函数的区别
  • 数组的操作
  • 为什么要用IPython/Jupyter?
  • 我看到的前端
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 带你开发类似Pokemon Go的AR游戏
  • "无招胜有招"nbsp;史上最全的互…
  • #git 撤消对文件的更改
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (03)光刻——半导体电路的绘制
  • (a /b)*c的值
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (原)本想说脏话,奈何已放下
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明