Vue3 Hooks 替代了 Vue2 Mixins

前言

我們知道,React社區(qū),已經(jīng)全面擁抱Hook。Vue3的發(fā)布也支持了自定義Hook,作為只會Vue2的前端碼農(nóng)自然要去看看Vue3 Hook到底有何魔力

從不了解React Hook的角度來看一下啥是Hook?
  • Vue 官方給出的自定義 Hook 的例子是這樣的:
import { ref, onMounted, onUnmounted } from "vue";

export function useMousePosition() {
  const x = ref(0);
  const y = ref(0);

  function update(e) {
    x.value = e.pageX;
    y.value = e.pageY;
  }

  onMounted(() => {
    window.addEventListener("mousemove", update);
  });

  onUnmounted(() => {
    window.removeEventListener("mousemove", update);
  });

  return { x, y };
}

組件中使用:

import { useMousePosition } from "./mouse";

export default {
  setup() {
    const { x, y } = useMousePosition();
    return { x, y };
  },
};

相信寫vue2的小伙伴應(yīng)該都有被Mixin支配過,特別是拿到應(yīng)該不熟悉的項目的時候,簡直是噩夢,各種Mixin,各種變量,方法,完全看不出從哪來的。

從代碼中使用中可以清晰的找到鼠標位置X,Y來自于useMousePosition函數(shù),useMousePosition就是一個函數(shù),使用了composition-api定義了響應(yīng)式數(shù)據(jù)XY然后導(dǎo)出,個人感覺是將mixin拆分了,將導(dǎo)入的操作交給了開發(fā)者,以前是vue直接幫我們把數(shù)據(jù)合并在了一起,反而導(dǎo)致了數(shù)據(jù)無從溯源的問題。

個人理解,歡迎糾正

  • hook可以當作以前mixin的來用
  • hook是一個函數(shù),mixin是一個對象
  • hook就是拆分版的mixin,將導(dǎo)入操作交給開發(fā)者,mixin是根據(jù)對應(yīng)的options Api直接merge到組件了
  • hook可以借用composition-api完全使用vue的能力,簡而言之就是你在setup函數(shù)用能用的hook都能用.

參考

1、[精讀《Vue3.0 Function API》] juejin.cn/post/684490…

2、[Vue3 究竟好在哪里?(和 React Hook 的詳細對比)])]segmentfault.com/a/119000002…

3、螢火之森:https://blog.xkongkeji.com

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容