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

山东大学创新项目实训开发日志(19)之前端知识深度学习

今天晚上在队长的带领下学习了一下前端vue的基础知识

reactive和ref函数

refreactive
数据类型原始数据、对象对象
操作js中需要添加.valuetamplate中则不用都不用添加.value

computed和watch

computed

  • 写法

    •  <script setup>const Factorial = computed(() => {let result = 1;for (let i = 1; i <= count.value; i++) {result *= i;}return result;});</script>​
  • 注意

    • 计算属性中不应该有异步请求或者修改dom等操作

    • 应该避免修改计算属性的值

watch

  • 作用监听一个或者多个数据的变化

基础使用-监听单个数据
  • 写法

    •  <script setup>watch(Factorial, (newFactorial, prevFactorial) => {console.log(`Factorial changed from  ${prevFactorial} to ${newFactorial}`);});</script>
  • 注意

    • ref对象不需要加.value

基础使用-监听多个数据
  • 写法

    •  <script setup>watch([count, zzy],([newCount, newZzy], [prevCount, prevZzy]) => {console.log(`多重监听count changed from  ${prevCount} to ${newCount}`);console.log(`多重监听zzy changed from  ${prevZzy.age} to ${newZzy.age}`);},{deep: true,});</script>
  • 注意

    • 用一个数组来设置需要监听的对象

    • 传入参数仍然是两个,新值在前,旧值在后(第10行)

immediate
  • 说明

    • 在监听器创建时立即触发回调函数

  • 写法

    •  <script setup>watch(zzy, () => {console.log('zzy changed');},{//在监听器创建时立即触发回调函数immediate: true});</script>

进阶使用-深度监听
  • 说明

    • 监听对象的嵌套属性发生变化时也会触发监听函数

    • 但是获取不到旧值,因为传入的是引用

    • 指向同一个地址所以pre和new是一样的

  • 写法

    •  <script setup>watch(zzy, (newZzy, prevZzy) => {console.log(`zzy changed from  ${prevZzy.age} to ${newZzy.age}`);},{//深度监听deep: true});​</script>

  • 深度监听,获取旧值

  • 先将对象转为JSON字符串,然后再转为对象,避免引用传递的问题

  • 写法

    •  let prevZzySnapshot = JSON.parse(JSON.stringify(zzy.value)); // 初始化快照​watch(zzy,(newZzy) => {console.log(`zzy changed from ${prevZzySnapshot.age} to ${newZzy.age}`);prevZzySnapshot = JSON.parse(JSON.stringify(newZzy)); // 更新快照},{deep: true,});

进阶使用-精确监听
  • 对象的某个嵌套属性变化时才执行,其它嵌套属性变化时不执行

  • 写法变成两个回调函数

    •  <script setup>watch(() => zzy.value.age,(newAge, prevAge) => {console.log(`zzy.age changed from  ${prevAge} to ${newAge}`);});​</script>

模板引用

 <div ref="index"><!-- code --!></div>
 <script setup>const index = ref(null)</script>

compute请求尽量不要有后端的请求

相关文章:

  • 2-6-1-1 QNX编程入门之进程和线程(八)
  • 二叉树的顺序结构及实现
  • 【Flutter】使用LiveKit和Flutter构建实时视频聊天应用
  • 【Docker项目实战】使用Docker部署Jupyter Notebook服务
  • Spring 微服务解决了单体架构的哪些痛点?
  • 深度解析 PointNet:点云深度学习的开山之作
  • 从零开始用Pytorch实现LLaMA 4的混合专家(MoE)模型
  • 【C++详解】C++入门(一)
  • Spring Boot 集成 Spring Cloud 的详细教程
  • 【概率论,算法】排列的峰值期望
  • 【linux基本工具的使用 yum vim gdb 以及makefile自动化构建项目】
  • Web3.0热门领域NFT项目实战课程
  • Vector的学习
  • INSTEAD OF 详细介绍
  • Linux 入门:基础开发工具(下)git,cgdb操作指南
  • 大模型编码实战:SpringBoot项目无缝接入AI能力的全栈指南
  • C++面试题集合(附答案)
  • 6、spring-cloud-gateway
  • rollup使用讲解
  • My SQL 索引
  • 心源性猝死正“猎杀”年轻人,这几招保命法则要学会
  • 电动自行车新国标将于9月1日落地,首批6家检测机构出炉
  • “我们一直都是面向全世界做生意”,“世界超市”义乌一线走访见闻
  • 为溶血性疾病治疗提供新靶点,专家团队在《细胞》发文
  • 长三角主流媒体将走进“来电”宜昌,探寻高质量发展密码
  • 85岁眼科专家、武汉大学人民医院原眼科主任喻长泰逝世