Vue3.0 通过使用 Composition API 中的 reactive
和 ref
函数来实现数据双向绑定。
- reactive 函数
reactive
函数是 Vue3.0 中用来创建响应式对象的函数。将一个 JavaScript 对象传递给 reactive
函数,它会返回一个新的响应式对象。响应式对象是一个 Proxy 对象,可以在应用程序中使用它来自动追踪数据的变化。
例如,我们可以这样使用 reactive
函数来创建一个响应式对象:
import { reactive } from 'vue';
const state = reactive({
message: 'Hello, world!'
});
在上面的示例中,我们使用 reactive
函数创建了一个包含一个 message
属性的响应式对象。
- ref 函数
ref
函数是 Vue3.0 中用来创建一个包含单个值的响应式对象的函数。将一个初始值传递给 ref
函数,它会返回一个新的响应式对象。响应式对象是一个普通对象,它有一个名为 value
的属性,该属性保存了当前值。当 value
属性的值发生改变时,Vue3.0 会自动更新应用程序的界面。
例如,我们可以这样使用 ref
函数来创建一个响应式对象:
import { ref } from 'vue';
const count = ref(0);
在上面的示例中,我们使用 ref
函数创建了一个包含初始值为 0 的响应式对象。
- 双向绑定的实现
Vue3.0 中的双向绑定可以通过在模板中使用 v-model
指令来实现。v-model
指令是 Vue3.0 中用来实现表单元素和组件的双向数据绑定的指令。例如,我们可以这样使用 v-model
指令来实现一个表单输入框的双向绑定:
htmlCopy code<template>
<input v-model="message" />
<p>{{ message }}</p>
</template>
<script>
import { ref } from 'vue';
export default {
setup() {
const message = ref('');
return {
message
};
}
};
</script>
在上面的示例中,我们在模板中使用 v-model
指令将输入框和 message
响应式对象进行双向绑定。当用户在输入框中输入文本时,message
响应式对象的值会自动更新,当 message
响应式对象的值发生改变时,界面上的文本也会自动更新。
总之,Vue3.0 使用 reactive
和 ref
函数来实现数据双向绑定。使用 reactive
函数可以创建包含多个属性的响应式对象,使用 ref
函数可以创建包含单个值的响应式对象。通过在模板中使用 `v-model
指令可以实现表单元素和组件的双向数据绑定,将表单元素的值绑定到响应式对象的属性上,当响应式对象的属性值变化时,自动更新绑定的表单元素的值。
除了使用 v-model
指令实现双向绑定,Vue3.0 也提供了 watch
函数和 watchEffect
函数来实现响应式数据的监听和副作用函数的执行。这些函数可以用来监听响应式数据的变化,从而执行特定的操作。下面是一个使用 watch
函数监听响应式数据变化的示例:
htmlCopy code<template>
<div>{{ count }}</div>
<button @click="increment">Increment</button>
</template>
<script>
import { ref, watch } from 'vue';
export default {
setup() {
const count = ref(0);
watch(count, (newVal, oldVal) => {
console.log(`count changed from ${oldVal} to ${newVal}`);
});
const increment = () => {
count.value++;
};
return {
count,
increment
};
}
};
</script>
在上面的示例中,我们使用 watch
函数监听 count
响应式对象的变化,当 count
响应式对象的值发生变化时,会自动调用回调函数,打印出 count
变化前和变化后的值。
另外,Vue3.0 中还提供了 computed
函数用来计算一个响应式对象的值,toRefs
函数用来将一个响应式对象转换为普通的对象,并且在 TypeScript 中使用时可以使用 defineComponent
函数来定义组件的类型,从而提高代码的可读性和可维护性。