Vue3中的Composables是什么
Vue3中的Composables 简单理解其实就是类React Hooks式的组合式函数封装方法。
Vue官方称为Composables 组合式函数。
(1)Vue2 中的mixins混入器写法缺点 (Vue3 optionsApi写法同理)
新建minxins.js文件 案例
//minxins.js 文件
export default{
data(){
return{
message:'混入对象',
name:'zhangsan000'
}
},
methods: {
logMessage() {
console.log('打印message', this.message);
}
}
}
使用组件
// 使用
import minxins from "./common/minxins";
import minxins1 from "./common/minxins1"; // 举例
import minxins2 from "./common/minxins2"; // 举例
export default{
mixins: [minxins, minxins1, minxins2], //可混入多个文件
data(){
return{
message:'混入对象新的',
bar:'bar',
}
},
created(){
this.logMessage(); // 打印 '混入对象新的'
console.log('created组件钩子被调用')
},
一个简单Vue2 (或Vue3optionsApi写法) minxins混入器案例很直观的看出 缺点:
// composables\useHelloWorldData.ts
import { ref, onMounted, onUnmounted } from 'vue'
export function useHelloWorldData() {
let message = ref<string>('混入对象');
let name = ref<string>('zhangsan000');
const logMessage = (): void => {
console.log(message.value);
};
onMounted(() => {
});
onUnmounted(() => {
});
return { message, name, logMessage }
}
使用
// template
<template>
<p>messagep>
<p>namep>
template>
//
import { onMounted } from 'vue'
import { useHelloWorldData } from '../composables/useHelloWorldData';
// let message = ref('混入对象新'); 异常提示 无法重新声明块范围变量“message”
const { message, name, logMessage } = useHelloWorldData();
onMounted(() => {
logMessage();
});
//
一个简单Vue3 composition API案例,写类Hooks函数(vue3成为组合式函数)实现minxin功能的 优点:
既然可以按照React Hooks的类组合式函数方式去写,功能就不仅仅局限在混入器minxin功能上
官方的简单小案例 封装 useMouse 鼠标位置监听 功能
// event.ts
import { onMounted, onUnmounted } from 'vue'
export function useEventListener(target, event, callback) {
onMounted(() => target.addEventListener(event, callback))
onUnmounted(() => target.removeEventListener(event, callback))
}
// useMouse.ts
import { ref } from 'vue'
import { useEventListener } from './event'
export function useMouse() {
const x = ref<number>(0);
const y = ref<number>(0);
useEventListener(window, 'mousemove', (event) => {
x.value = event.pageX
y.value = event.pageY
})
return { x, y }
}
使用
<script setup>
import { useMouse } from './useMouse'
const { x, y } = useMouse()
</script>
<template>鼠标位置: {{ x }}, {{ y }}</template>
Vue3中的Composables是什么 官方文档地址: https://vuejs.org/guide/reusability/composables.html
Vue3使用类Hooks的函数式编程有什么优点 # 尤雨溪 19年的视频有说到过(22:58时间处) https://www.bilibili.com/video/BV1K4411N7u3?spm_id_from=333.999.header_right.fav_list.click&vd_source=7e59139d8d4ca4b7a100d53ee1cf711f