setup原始写法
在setup中声明数据和函数,结果要用return{}的形式返回,才可以用模板语法。
setup中没有this
语法糖
将复杂的写法改为简单的写法,数据和方法就不用return返回才可以用模板语法
reactive只接受对象
ref(简单数据+复杂数据)
脚本中修改数据要用.value 在模板中使用数据就直接用变量名
ref函数依赖与reacitve函数,推荐使用ref函数
computed计算属性函数
导入函数
执行函数
计算属性处理正常的处理外不要做任何操作,如异步,避免直接修改计算属性的值,计算属性应该是只读的。
watch函数
监听数据的变化
导入函数
执行watch函数传入要侦听的响应式数据(ref对象)和回调函数
参数(ref对象,(newValue,oldValue)=>{})
watch函数监听多个数据变化
同时监听多个响应式数据变化,不管哪个数据变化都需要执行回调
前面的参数是数据数组,后面回调参数的参数是每个数据数组内部元素对应的新值,第二个数组元素是对应数据元素的旧值。
立即执行:immediate
在侦听器创建时立即触发回调,响应数据变化之后继续执行回调。
deep
通过watch监听的ref对象默认时浅层侦听
父子通信
父传子
父组件中给子组件绑定属性
通过defineProps "编译器宏"接收子组件传递的数据
父组件
子组件:响应数据可以直接用defineProps中的名字
子传父:通过事件模型
通过 const name = defineEmits([事件名称(将所有的自定义事件都写在里面)])生成相应的方法
触发自定义事件,并传递参数
name(事件名称,传递的数据)
父组件
子组件
模板引用
通过ref标识获取真实的dom对象或组件实例对象
获取ref对象,将ref对象绑定到相应的dom标签上
可以用这个方法修改dom和组件实例对象
在语法糖中组件内部的属性和方法时不开放给父组件访问,通过defineExpose()方式可以将指定的属性和方法暴露给父组件。
provide和inject
作用:顶层组件向任意的底层组件传递数据和方法实现跨层组件通信
provide函数提供数据
inject函数获取数据
顶层组件:provide('key',顶层组件中的数据)
底层组件:const message = inject('key')
顶层
中间层
底层
谁的数据谁管理