当我们在Vue3中使用reactive
函数时,需要了解以下几个概念:
-
reactive
函数用于将数据转换为响应式数据对象,返回一个Proxy代理对象,该对象会拦截对其属性的所有读取和修改操作,从而实现响应式更新 -
ref
函数用于将基础类型数据转换为响应式数据对象,返回一个Ref对象。Ref对象和Proxy对象一样也可以在模板或者JS代码中使用,并且也会自动追踪响应式更新 -
computed
函数用于对多个响应式数据进行计算和监听变化,返回一个Computed Ref对象。计算属性在对其中一个依赖进行修改后会自动更新。
下面是一个使用reactive
的示例:
import { reactive } from 'vue';
const state = reactive({
count: 0
});
在上述示例中,我们使用reactive
函数将对象{count:0}
转换为一个响应式的数据对象,同时也返回了一个Proxy代理对象state。
如果我们需要在组件中使用这个响应式数据对象,只需要在模板中使用即可:
<template>
<div>{{state.count}}</div>
<button @click="increment">增加</button>
</template>
<script>
import { reactive } from 'vue';
export default {
setup() {
const state = reactive({
count: 0
});
const increment = () => {
state.count++;
}
return { state, increment };
}
}
</script>
上述示例中,我们在组件setup函数中使用reactive
函数创建了响应式数据对象state。然后在组件模板中,直接使用state.count输出计数器的值。同时我们还添加了一个按钮,点击按钮后调用increment函数,通过修改state.count来实现响应式更新。
下面是一个使用computed
的示例:
<template>
<div>总价:{{ total }}</div>
<ul>
<li v-for="p in products" :key="p.id">
<div>{{ p.name }}</div>
<div>价格:{{ p.price }}</div>
<input type="number" v-model="p.quantity">
<div>小计:{{ p.subtotal }}</div>
</li>
</ul>
</template>
<script>
import { reactive, computed } from 'vue';
export default {
setup() {
const products = reactive([
{ id: 1, name: '商品1', price: 10, quantity: 2 },
{ id: 2, name: '商品2', price: 20, quantity: 1 },
{ id: 3, name: '商品3', price: 30, quantity: 3 }
]);
const total = computed(() => {
return products.reduce((sum, p) => { return sum + p.price * p.quantity }, 0);
});
return { products, total };
}
}
</script>
在上述示例中,我们使用reactive
创建了一个数组对象products,数组中包含了多个对象,每个对象都有一个quantity属性,表示商品的数量,我们希望实现当商品数量发生改变时,总价能够自动更新。因此我们使用computed
函数来计算总价,返回一个计算属性对象total,并在模板中输出total的值。
同时,我们在模板中使用v-model指令来绑定商品数量,当商品数量发生改变时,会自动触发计算属性的重新计算,从而实现了响应式更新的功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:对Vue3中reactive的深入理解 - Python技术站