Vue3 —— 常用 Composition API(零)(setup函数、ref函数、reactive函数、响应式、reactive对比ref)
Vue3 —— 常用 Composition API(一)(computed函数、watch函数、watchEffect函数、生命周期钩子)
Vue3 —— 常用 Composition API(二)(hook 函数、toRef 和 toRefs)
Vue3 —— 其他 Composition API(shallowReactive、shallowRef、readonly、shallowReadonly、toRaw、markRaw…)
Vue3 —— 新的组件及一些改变(Fragment、Teleport、Suspense、其他的改变)
usexxx.js 文件 (一般都以 use- 开头)
./hook/usePoint.js:定义鼠标打点的相关内容
import { reactive, onMounted, onBeforeUnmount } from "vue";
export default function savePoint() {
// 实现鼠标打点相关的数据
let point = reactive({
x: 0,
y: 0,
});
// 实现鼠标打点相关的方法
function savePoint(event) {
point.x = event.pageX;
point.y = event.pageY;
console.log(event.pageX, event.pageY);
}
// 实现鼠标打点相关的钩子
onMounted(() => {
window.addEventListener("click", savePoint);
});
onBeforeUnmount(() => {
window.removeEventListener("click", savePoint);
});
return point
}
Demo.vue:导入 hooks 文件夹里面的 js 文件,直接使用
<template>
<div>
<h3>当前点击时鼠标的坐标为:x:{{point.x}}, y:{{point.y}}</h3>
</div>
</template>
<script>
import usePoint from '../hooks/usePoint'
export default {
name: "Demo",
setup() {
// 数据
let point = usePoint()
// 返回一个对象
return { point };
},
};
</script>
初始点:

找到了个浪漫点:

// 语法
const name = toRef(person, 'name')
- 在返回的对象中,每个属性都用
toRef()响应式接收- 在模板字符串里面直接写属性名,就不用使用
.获取了
<template>
<div>
<h3>姓名:{{name}}</h3>
<h3>年龄:{{age}}</h3>
<h3>薪资:{{salary}}K</h3>
<button @click="name+='~'">修改姓名</button>
<button @click="age++">增长年龄</button>
<button @click="salary++">增加薪资</button>
</div>
</template>
<script>
import { reactive, toRef } from "vue";
export default {
name: "Demo",
setup() {
// 数据
let person = reactive({
name: '张三',
age: 18,
job: {
j1:{
salary: 20
}
}
})
// 返回一个对象
return {
name: toRef(person, 'name'),
age: toRef(person, 'age'),
salary: toRef(person.job.j1, 'salary')
};
},
};
</script>
分别点击各个按钮数次后(响应式更新):

- toRefs 是一个对象,对象里面不能直接写对象,所有使用
...展开运算符- 只对 person 的一级键值对有效,更深层次的还是需要通过
.手动获取
<template>
<div>
<h3>姓名:{{name}}</h3>
<h3>年龄:{{age}}</h3>
<h3>薪资:{{job.j1.salary}}K</h3>
<button @click="name+='~'">修改姓名</button>
<button @click="age++">增长年龄</button>
<button @click="job.j1.salary++">增加薪资</button>
</div>
</template>
<script>
import { reactive, toRefs } from "vue";
export default {
name: "Demo",
setup() {
// 数据
let person = reactive({
name: '张三',
age: 18,
job: {
j1:{
salary: 20
}
}
})
// 返回一个对象
return {
...toRefs(person)
};
},
};
</script>
分别点击各个按钮数次后(响应式更新):

不积跬步无以至千里 不积小流无以成江海
点个关注不迷路,持续更新中…