vue3.0 Composition API 上手初體驗 函數組件的開發與使用

vue3.0 Composition API 上手初體驗 函數組件的開發與使用

在上一節中,我們討論了普通組件的開發與使用,其實相比較 vue 2.0 來說,差別並不大。

vue 3.0Composition API 帶來的最大的特性,就是函數組件。通過函數組件,我們可以體會到 類似 react 編程的愉悅。這個章節,我們就來討論一下。

vue 2.0 中,當多個頁面或組件使用到相同邏輯的時候,我們會使用 mixin 來編寫邏輯。其實我個人在使用 mixin 時,感覺還是很方便的,但是當項目組的其他成員開始使用 mixin 時,我就經常崩潰了。

原因很簡單,當使用 mixin 時最大的問題就是——命名污染。比如,你在 mixin 中定義了一個 datalove,那麼,在調用該 mixin 的頁面,就不能使用 love 了,否則會覆蓋掉。當然,方法名也是一樣的。生命週期的話,還存在重複執行的問題。

這導致的結果就是,要小心意義的使用 mixin,甚至,在某些團隊裏面,就嚴禁使用 mixin 了。

好,廢話不說,閒言少敘,開幹。

創建函數式子組件 Position.js

# 進入項目文件夾
cd ~/Sites/myWork/demo/vue3-demo
# 創建 Position.js 文件
touch src/components/Position.js

創建好文件後,我們錄入以下內容:

// 函數式組件, 該組件會返回鼠標在屏幕上的座標值
// toFefs 是將 reactive 對象的所有 key 都轉化爲 ref 值
// 這樣,在引入使用的組件中,就可以 用 const { x, y } = xx 來使用這些 key 對應的 value 了
import { onMounted, onUnmounted, reactive, toRefs } from 'vue'

// 這裏導出,就不是對象,而是一個函數了。
export default () => {
  // 定義一個準備導出的對象數據
  const position = reactive({
    x: 0,
    y: 0
  })
  // 定義一個會改變數據的函數
  const update = page => {
    position.x = page.pageX
    position.y = page.pageY
  }
  // 使用生命週期,綁定和移除事件
  onMounted (() => {
    window.addEventListener('mousemove', update)
  })
  onUnmounted (() => {
    window.removeEventListener('mousemove', update)
  })
  // 將 reactive 對象 轉化爲 ref 響應式的值,並返回
  return toRefs(position)
}

這是一個簡單的函數組件,其作用是返回鼠標在屏幕的座標,通過 vue 提供的生命週期,我們來綁定和移除事件。

這裏的重點是什麼呢?在 vue2.0 當中,我們當然可以把一些函數方法給抽離出來,寫自定義的工具函數,以達到邏輯的複用。但是,這些只是純粹的 js 而已。而 vue3.0 提供的這種函數式風格的組件,可以非常方便的在函數中使用 vue 的特性,比如生命週期等等。

這樣,我們就能寫出更加靈活的功能了,而不僅僅只是業務邏輯代碼的抽離。這一點,也是 vue3.0 帶來的最大變革。

知識點

這裏,我們用到了 toRefs 方法。這個也算是 vue3.0 給我們提供的一個語法糖函數了。通過 toRefs 函數,它可以將 reactive 對象,轉化爲普通對象,而它的每個 key 值,都會是如 ref 數據那樣的格式,打印出來如下圖所示:

可以看到,每個 key 都變成了對象,並且,都有一個 value 值。這樣就變成了響應式的數據。

寫一個調用函數子組件的父組件

我們創建一個 src/views/Father.vue 文件,並在路由中設置地址爲 /father。錄入以下內容:

<template>
  <div class="home">
    鼠標 x 軸 座標 >>> <span class="red">{{ x }}</span> <br>
    鼠標 y 軸 座標 >>> <span class="red">{{ y }}</span> <br>
  </div>
</template>
<script>
// 引用我們開發的子組件
import Position from '@/components/Position.js'
export default {
  setup () {
    // 引用函數子組件並展開它的值
    const { x, y } = Position()
    // 將他的值 return 出去
    return { x, y }
  }
}
</script>

代碼非常簡單,只要引用我們的函數子組件,執行並拿到結果,return 出去,或者參與其他的計算等等,都是可以的。別的沒啥,看效果就行啦!

好的,通過本文的講解,相信大家對於函數組件的開發,已經有一定的瞭解了。下面,只要我們去想想自己的應用場景,去構建自己的項目,就可以啦!

本文由 FungLeo 原創,允許轉載,但轉載必須保留首發鏈接。


《vue3.0 Composition API 上手初體驗》 文章目錄地址: https://blog.csdn.net/fungleo/category_10020552.html 我會不定期的補充一些相關內容,歡迎關注訂閱!

文章代碼倉庫 https://github.com/fengcms/vue3-demo 會用 git 的朋友,可以去直接下載我的代碼。當然,給我點個 star 啥的,也不是不可以的哈!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章