# 1.ref (reference 引用) 基本使用
App 为根组件 下面 Home 例子都被此组件引用
// App.vue | |
<template> | |
<div> | |
<home></home> | |
</div> | |
</template> | |
<script> | |
import Home from "./Home.vue"; | |
export default { | |
components: { | |
Home, | |
}, | |
}; | |
</script> | |
<style scoped> | |
</style> |
// Home.vue | |
<template> | |
<div> | |
<!-- 当我们在 template 模板中使用 ref 对象,它会自动进行浅层解包,所以可直接写 counter --> | |
<h2>{{ counter }}</h2> | |
<button @click="increment">+1</button> | |
</div> | |
</template> | |
<script> | |
import { ref } from "vue"; | |
console.log(ref); // 打印出也是一个函数 | |
export default { | |
setup() { | |
//counter 变成一个 ref 的可响应式的引用 | |
let counter = ref(100); | |
console.log(counter); // 打印出是 RefImpl1 对象 | |
// 执行五次 increment 参考结果 increment5 | |
const increment = () => { | |
// 在逻辑代码里是没有自动解包功能的,要通过 counter.value 来获取 | |
//counter++; 错误的写法,ref 对象不能 ++ | |
counter.value++; | |
console.log(counter.value); | |
}; | |
return { | |
counter, | |
increment, | |
}; | |
}, | |
}; | |
</script> | |
<style scoped> | |
</style> |
参考结果:
# 2. 使用变量包裹 ref 对象
// Home.vue | |
<template> | |
<div> | |
<!-- 当我们在 template 模板中使用 ref 对象,它会自动进行浅层解包,所以可直接写 counter --> | |
<h2>info.counter.value:{{ info.counter.value }}</h2> | |
<!-- 不过现在可以不需要 value 来获取了,直接写结果也是一样的 --> | |
<h2>info.counter:{{ info.counter }}</h2> | |
<button @click="increment">+1</button> | |
</div> | |
</template> | |
<script> | |
import { ref } from "vue"; | |
export default { | |
setup() { | |
const counter = ref(100); | |
// 当使用变量 info 把 ref 包裹起来时 | |
const info = { | |
counter, | |
}; | |
const increment = () => { | |
// 在逻辑代码里是没有自动解包功能的,要通过 counter.value 来获取 | |
counter.value++; // 这里是正常 ++ 的 | |
// info.counter++; // NaN | |
// 这里使用 info.counter.value++ 也是能正常 ++ 的 | |
info.counter.value++; | |
// 打印出 info.counter 也是一个 RefImpl 对象 | |
console.log("info.counter:", info.counter); // 这里是无法通过 info.counter++ 的 | |
// 可以看出这里还是需要使用 value 来获取 | |
console.log("info.counter.value:", info.counter.value); | |
console.log("---------------------------------"); | |
}; | |
return { | |
info, | |
counter, | |
increment, | |
}; | |
}, | |
}; | |
</script> | |
<style scoped> | |
</style> |
参考结果: