Ref
使用 Ref 可以方便地创建和管理Vue组件中的响应式数据。例如,如果你有一个计数器组件,你可以使用 Ref 来创建一个响应式的计数器变量,然后在组件内部或外部修改这个变量的值,而不需要手动触发视图更新。
先声明一个变量,然后用插值表达式在template中渲染出来,代码如下:
<template>
<view>{{num1}}</view>
</template>
<script setup>
let num1 = 6 ;
</script>
<style>
</style>
效果如下:
接着,尝试定义一个计时器,让数字每秒钟增加1,并输出出来,代码如下:
<template>
<view>{{num1}}</view>
</template>
<script setup>
let num1 = 6 ;
setInterval(()=>{
num1 ++ ;
console.log(num1) ;
},1000)
</script>
<style>
</style>
效果如下:
可以看到,页面的数字是没有发生变化的,但控制台里正常在计数。这样,说明定义的变量,并不是响应式的,该如何定义一个响应式的变量?
首先,必须从vue模块中,把ref引用过来,然后再重新定义变量,代码如下:
<template>
<view>{{num1}}</view>
<view>{{num2}}</view>
</template>
<script setup>
import {ref} from "vue" ;
let num1 = 6 ;
let num2 = ref(10) ;
setInterval(()=>{
num2.value ++ ;
console.log(num2.value) ;
},1000)
</script>
<style>
</style>
效果如下:
成功,所以想要实现响应式变量要注意以下三点:
- 从vue中导入ref函数
- 定义变量时放在ref里面
- 想要获取的值,要加上.value
还可以把字符串、数组、对象放在ref中,在template中渲染出来,代码如下:
<template>
<view>{{num1}}</view>
<view>{{num2}}</view>
<view>{{test}}</view>
<view>{{arr[2]}}</view>
<view>{{arr}}</view>
<view>{{obj}}</view>
<view>{{obj.name}}</view>
</template>
<script setup>
import {ref} from "vue" ;
let num1 = 6 ;
let num2 = ref(10) ;
let test = ref("字符串")
let arr = ref([1,3,5])
let obj = ref({name:"张三", age: 18})
setInterval(()=>{
num2.value ++ ;
console.log(num2.value) ;
},1000)
</script>
<style>
</style>
效果如下:
修改对象中的name,也要带上.value,代码如下:
<template>
<view>{{num1}}</view>
<view>{{num2}}</view>
<view>{{test}}</view>
<view>{{arr[2]}}</view>
<view>{{arr}}</view>
<view>{{obj}}</view>
<view>{{obj.name}}</view>
</template>
<script setup>
import {ref} from "vue" ;
let num1 = 6 ;
let num2 = ref(10) ;
let test = ref("字符串")
let arr = ref([1,3,5])
let obj = ref({name:"张三", age: 18})
obj.value.name = "改名成功!"
setInterval(()=>{
num2.value ++ ;
console.log(num2.value) ;
},1000)
</script>
<style>
</style>
效果如下: