vue3 项目的创建、组合式API、rective和ref、watch函数

vue3项目的创建:

复制代码
npm init vue@latest

在执行上述代码以后,按需勾选项目所需的东西就可以

然后再命令行依次执行:

javascript 复制代码
// 进入项目
cd vuedemo
//安装下来对应的包
npm install
//启动项目
npm run dev

文件解读:

package.json :相关的依赖

vite.config.js :项目的配置文件 (基于vite) 添加一些工具和插件

main.js :creatApp创建一个应用实例对象,import导入组件和样式文件css等 mount方法做挂载操作,creatApp函数创建应用实例

index.html :提供了id作为app的挂载点

组合式API 入口(setup):

<script setup> 是vue3提供的一个语法糖,写上了setup就可以直接写组合式api

在setup{ }中定义的数据和方法必须return出去才可以使用

vue3中的this 并不指向我们的组件实例,会undefine

语法糖:<script setup>

使用语法糖以后就不用setup{ }了,在里面定义的数据和方法也不用return了

总结:

setup的执行时机:在beforeCreate钩子执行之前,自动执行

setup写代码的特点:定义数据+函数 然后以对象的方式retrurn

语法糖:更简单的使用组合式API

setup中的this不再指向组件实例,而是指向undefine

组合式API rective和ref

reactive():接收对象类型数据的参数并返回一个响应式的对象

javascript 复制代码
import { reactive } from 'vue'
const state = reactive({
  count: 0
})
const good =  () => {
  state.count++
}
<button @click="good">{{ state.count }}</button>

ref() :接收对象类型数据和基本的类型数据的参数并返回一个响应式的对象

javascript 复制代码
import {ref} from 'vue'
const state = ref(0)
const good =  () => {
  state.value++
}
<button @click="good">{{ state }}</button>

注意:在脚本区域修改ref的话就需要使用ref.data

总结:

reactive和ref :都用来生成响应式数据

reactive vs ref:reactive不能处理简单的数据类型,ref在script中必须通过.value访问

在实际的开发过程中我们通常使用ref函数

watch函数

作用:监听数一个或者多个数据的变化,数据变化时执行回调函数,两个额外的参数:1、immediate(立即执行)2、deep(深度监听)

监听单个数据:

javascript 复制代码
<script setup>
import { ref,watch} from 'vue'
const count = ref(0)
const setCount = () => {
  count.value++
}
watch(count,(newVal,oldVal) => {
  console.log('count变化了',newVal,oldVal)
})
</script>
<template>
  <div>
    <button @click="setCount">{{ count }}</button>
  </div>
</template>

监听多个数据:

javascript 复制代码
<script setup>
import { ref,watch} from 'vue'
const count = ref(0)
const changeCount = () => {
  count.value++
}
const name = ref('con')
const changeName = () => {
  name.value = 'pc'
}

watch(
  [count,name],
  (
    [newCount,newName],
    [oldCount,oldName]
  ) => {
    console.log('有值发生变化了',[newCount,newName],
      [oldCount,oldName]
    )
  }
)
</script>
immediate:在监听器创建时立即触发回调,响应式数据变化之后继续执行回调

1、除了做计算剩下的都不要做,不然会降低性能

2、计算出来的值不能直接去修改前台的页面中的值,计算出来的是只读的

javascript 复制代码
<script setup>
import { ref } from 'vue'
import { computed } from 'vue'
const list = ref([1,2,3,4,5,6,7,8])
const computedList = computed(()=>{
  return list.value.filter(item => item >2)
 // return list.value.filter((item) => item >2)
})

setTimeout(() => {
  list.value.push(9,10)
},3000)
//filter方法
</script>
<template>
  <div>
    原始响应式数据{{ list }}
    计算后的数据{{ computedList }}
  </div>
</template>
相关推荐
Flynt1 小时前
我把热榜那篇"禁用 axios"逐条实测了一遍:结论大体对,坑在它没讲的地方
前端·javascript·axios
Csvn2 小时前
bundle优化
前端
slongzhang_3 小时前
linux 递归删除源码文件|递归删除目录下 *.js,但排除 *.min.js
linux·开发语言·javascript
北冥有鱼3 小时前
发版后动态路由点击报 `Failed to fetch dynamically imported module`」问题上的完整排查与修复过程
前端·vue.js
静默回滚3 小时前
视频压到 25 MB 以内,码率要算、音轨要扣、余量要留
前端
用户37203749260183 小时前
把 10MB 中文语义模型塞进浏览器:STSB 做到教师模型的 93%,但线上 top1 只有 42%
前端
光锥智能3 小时前
海康机器人举行2026移动机器人新品发布会:箱式存拣升级,「明智」系列发布
java·前端·机器人
计算机魔术师3 小时前
Anthropic 上市文件最吓人的一幕,不是亏损 807 亿
前端
alsmile3 小时前
AI友好的可视化图形引擎自我革命:Meta2d.js 2.0 历时一年全新重写,性能与多人协作全面升级
前端·开源·数据可视化
行思理3 小时前
Nginx 跨站请求(CORS)配置完全指南:从原理到生产实践
java·前端·nginx