信息展示
姓名:
{{ data.name }}
年龄:
{{ data.age }}
信息展示
姓名:
{{ name }}
年龄:
{{ age }}
import { ref, readonly } from 'vue'
// 创建响应式对象
const name = ref('张三')
const age = ref('18')
const readonlyName = readonly(name)
const editName = () => {
// 通过 ref 创造的响应式对象,我们需要通过 ref.value 的方式访问
name.value = '李四'
}
我们修改name时,readonlyName的值也会跟着进行改变,但是直接修改readonlyName并不会生效。
import { toRefs, reactive } from 'vue'
const user = reactive({ name: '张三', age: '18' })
// user 下的属性通过 toRefs 与解构后的数据建立了链接,任何一个修改都会引起另一个的变化
const { name, age } = toRefs(user)
const editName = () => {
name.value = '李四'
}
const editAge = () => {
age.value = '25'
}
如果想解构单个数据可以使用toRef,示例代码如下:
const name = toRef(user, 'name')
const age = toRef(user, 'age')
import { ref, watch } from 'vue';
const name = ref('张三')
watch(name, (newValue, oldValue) => {
console.log(`原值为${oldValue}`)
console.log(`新值为${newValue}`)
})
import { reactive, watch } from 'vue';
const data = reactive({
name: '张三',
age: '18'
})
watch(data, (newValue, oldValue) => {
console.log('监听data', newValue.name, newValue.age)
})
import { reactive, watch } from 'vue';
const data = reactive({
name: '张三',
age: '18'
})
watch(() => data.name, (newValue, oldValue) => {
console.log(`原值为${oldValue}`)
console.log(`新值为${newValue}`)
})
const props = defineProps({
name: { type: String, required: true }
})
watch(() => props.name, (newValue) => {})
watch([name, age], ([newName, newAge], [oldName, oldAge]) => {
console.log(newName, newAge)
})
watch([
() => obj1.a,
() => obj2.b
], (newValArr) => {
console.log(...newValArr)
})
watchEffect 它与 watch 的区别主要有以下几点:
import { reactive, watchEffect } from 'vue';
const data = reactive({
name: '张三',
age: '18'
})
watchEffect(() => {
console.log(data.name);
console.log(data.age);
})
Vue3的composition API没有生命周期钩子选项,但是提供了onBeforeMount、onMounted等函数来注册声明周期钩子,提供的声明周期函数如下表所示:
选项式API | Hook inside setup | 触发时机 |
---|---|---|
beforeMount | onBeforeMount | 组件挂载之前触发 |
mounted | onMounted | 组件挂载后触发 |
beforeUpdate | onBeforeUpdate | 组件更新之前触发 |
updated | onUpdated | 组件更新后触发 |
beforeUnmount | onBeforeUnmount | 组件卸载之前触发 |
unmounted | onUnmounted | 组件卸载后触发 |
下面代码展示了部分api的用法
import { onMounted, onUnmounted, onUpdated } from 'vue';
onMounted(() => {
console.log('onMounted')
})
onUpdated(() => {
console.log('onUpdated')
})
onUnmounted(() => {
console.log('onUnmounted')
})
由于Vue3的composition API无法使用this,所以说this.$refs并不可以用,那我们怎么获取到组件或者元素呢?其实非常简单,我们需要定义个ref对象,名称与模板中ref属性的名称一致即可。如下:
张三