笔记
只要是在 setup(){} 写的API,都叫 组合式API(= Composition API)
源码
App.vue
<template>
<button @click="isShowDemo = !isShowDemo">切换隐藏/显示</button>
<Demo v-if="isShowDemo"/>
<hr>
<Test/>
</template>
<script>
import {ref} from 'vue'
//Failed to load resource: the server responded with a status of 404 (Not Found) 解决办法: 引入的时候,添加后缀.vue
import Demo from './components/Demo.vue'
import Test from './components/Test.vue'
export default {
name: 'App',
components:{Demo,Test},
setup() {
let isShowDemo = ref(true)
return {isShowDemo}
}
}
</script>components\Demo.vue
<template>
<h2>当前求和为:{{sum}}</h2>
<button @click="sum++">点我+1</button>
<hr>
<h2>当前点击时鼠标的坐标为:x:{{point.x}},y:{{point.y}}</h2>
</template>
<script>
//import {onBeforeUnmount, onMounted, onUnmounted, reactive, ref} from 'vue'
import {ref} from 'vue'
//注意: usePoint.js 暴露出来的 usePoint 是一个函数。
import usePoint from '../hooks/usePoint'
export default {
name: 'Demo',
setup(){
//数据
let sum = ref(0)
//把点 包装为一个对象:
/*let point = reactive({
x:0,
y:0
})
onMounted(() => {
window.addEventListener('click',(event)=>{
point.x = event.pageX
point.y = event.pageY
console.log(event.pageX, event.pageY)
})
})
onBeforeUnmount(()=>{
//为 click 卸载对应的回调函数. 但是此时的回调并不是上面添加click对应的回调. 所以需要把上面的回调函数放到外面,统一使用。
window.removeEventListener('click',(event)=>{
point.x = event.pageX
point.y = event.pageY
console.log(event.pageX, event.pageY)
})
})*/
//把回调放到外面,保证使用同一个:
/*function savePoint(event){
point.x = event.pageX
point.y = event.pageY
console.log(event.pageX, event.pageY)
}
onMounted(() => {
window.addEventListener('click',savePoint)
})
onBeforeUnmount(()=>{
//为 click 卸载对应的回调函数. 但是此时的回调并不是上面添加click对应的回调. 所以需要把上面的回调函数放到外面,统一使用。
window.removeEventListener('click',savePoint)
})*/
//把上面的相关内容打包到 hooks\usePoint.js
let point = usePoint()
//返回一个对象(常用)
return {sum,point}
}
}
</script>hooks\usePoint.js
import {reactive,onMounted,onBeforeUnmount} from 'vue'
//把 当前函数 暴露出去,供别人引用
export default function (){
//实现鼠标“打点”相关的 数据
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)
})
//把 point 交出去
return point
}
