亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue3 composition API實現(xiàn)邏輯復用的方法

 更新時間:2021年08月20日 09:02:59   作者:miao8862  
本文主要介紹了Vue3 composition API實現(xiàn)邏輯復用的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

Composition API實現(xiàn)邏輯復用的步驟:

  1. 抽離邏輯代碼到一個函數(shù),這個函數(shù)命令約定為useXXX格式(這點同React Hooks)
  2. 在setup中引用函數(shù)useXXX

舉下例子,定義一個獲取當前鼠標位置的方法

第一種,直接使用ref定義的useMousePosition:

這種方式,導出和導入都可以隨意解構

// useMousePosition.js
import { ref, onMounted, onUnmounted } from 'vue'

// 1. 定義一個函數(shù),抽離邏輯,命名使用 useXXX
function useMousePosition() {
  // 使用ref定義
  const x = ref(0)
  const y = ref(0)

  function update(e) {
    console.log(x.value, y.value);

    x.value = e.pageX
    y.value = e.pageY
  }

  onMounted(() => {
    console.log('開始監(jiān)聽鼠標劃動事件');
    window.addEventListener('mousemove', update)
  })

  onUnmounted(() => {
    console.log('解除監(jiān)聽鼠標劃動事件');
    window.removeEventListener('mousemove', update)
  })
  return {
    x, 
    y
  }
}

 
// 導出這個函數(shù)
export default useMousePosition
<!-- 在任意一個組件,都可以調用這個方法 -->

<template>
  <p>mouse position: {{x}}, {{y}}</p>
</template>

<script>
import useMousePosition from './useMousePosition'
export default {
  name: 'MousePosition', 
  setup() {
    // useMousePosition是使用ref定義變量的,這種可以解構
    const { x, y } = useMousePosition()
    console.log(x, y)
    return {
      x, y
    }
  }
}
</script>

第二種,使用reactive定義鼠標坐標對象

這種導出的方式,在組件中導入時是不能解構的

import {  onMounted, onUnmounted, reactive } from 'vue'

export function useMousePosition2() {
  // 使用reactive定義
  const mouse = reactive({
    x: 0, 
    y: 0
  })

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

  onMounted(() => {
    console.log('開始監(jiān)聽鼠標劃動事件');
    window.addEventListener('mousemove', update)
  })

  onUnmounted(() => {
    console.log('解除監(jiān)聽鼠標劃動事件');
    window.removeEventListener('mousemove', update)
  })

  return {
    mouse
  }
}
<template>
  <!-- 使用對象方式顯示信息 -->
  <p>mouse position2: {{mouse.x}}, {{mouse.y}}</p>
</template>
<script>
import { useMousePosition2 } from './useMousePosition'
export default {
  name: 'MousePosition', 
  setup() {
    // useMousePosition2是使用reactive定義的,這種不可以解構
    const { mouse } = useMousePosition2()
    return {
      mouse
    }
  }
}
</script>

第三種,使用toRefs

使用這種方式,可以將reactive對象,解構為ref對象

export function useMousePosition3() {
  // 使用reactive定義
  const mouse = reactive({
    x: 0, 
    y: 0
  })

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

  onMounted(() => {
    console.log('開始監(jiān)聽鼠標劃動事件');
    window.addEventListener('mousemove', update)
  })

  onUnmounted(() => {
    console.log('解除監(jiān)聽鼠標劃動事件');
    window.removeEventListener('mousemove', update)
  })
  
  // 這里,使用toRefs解構成ref對象
  return toRefs(mouse)
}
<template>
  <p>mouse position: {{x}}, {{y}}</p>
</template>

<script>
import { useMousePosition3 } from './useMousePosition'
export default {
  name: 'MousePosition', 
  setup() {
    // 使用reactive定義鼠標坐標對象,然后通過toRefs將其解構成ref對象
    const { x, y } = useMousePosition()
    console.log(x, y)
    return {
      x, y
    }
  }
}
</script>

三種方式都可以實現(xiàn),但是我們一般使用時,都會返回ref對象,所以比較建議使用第一種和第三種,盡量不使用第二種

到此這篇關于Vue3 composition API實現(xiàn)邏輯復用的方法的文章就介紹到這了,更多相關Vue3 composition API邏輯復用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue鼠標懸停事件監(jiān)聽實現(xiàn)方法

    vue鼠標懸停事件監(jiān)聽實現(xiàn)方法

    頁面在鼠標懸停(不動)n秒之后,頁面進行相應的事件,下面這篇文章主要給大家介紹了關于vue鼠標懸停事件監(jiān)聽的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • Vue打印錯誤日志問題

    Vue打印錯誤日志問題

    這篇文章主要介紹了Vue打印錯誤日志問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Uniapp中WebView的使用與后退鍵處理教程

    Uniapp中WebView的使用與后退鍵處理教程

    在Uniapp中使用web-view組件來加載H5頁面時,對于后退鍵的處理是一個常見需求,下面這篇文章主要給大家介紹了關于Uniapp中WebView的使用與后退鍵處理的相關資料,需要的朋友可以參考下
    2024-07-07
  • Vue實現(xiàn)無縫輪播效果

    Vue實現(xiàn)無縫輪播效果

    這篇文章主要為大家詳細介紹了Vue實現(xiàn)無縫輪播效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Vue突然報錯doesn‘t?work?properly?without?JavaScript?enabled的解決方法

    Vue突然報錯doesn‘t?work?properly?without?JavaScript?enabled

    最近在做項目的時候遇到了些問題,所以這篇文章主要給大家介紹了關于Vue突然報錯doesn‘t?work?properly?without?JavaScript?enabled的解決方法,需要的朋友可以參考下
    2023-01-01
  • Vue computed計算對象不生效問題及解決

    Vue computed計算對象不生效問題及解決

    這篇文章主要介紹了Vue computed計算對象不生效問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Vue常用指令v-if與v-show的區(qū)別淺析

    Vue常用指令v-if與v-show的區(qū)別淺析

    v-if和v-show的區(qū)別是前端面試中常問的基礎知識點,v-if、v-show顧名思義就是用來判斷視圖層展示效果的,下面這篇文章主要給大家介紹了關于Vue常用指令v-if與v-show區(qū)別的相關資料,需要的朋友可以參考下
    2021-10-10
  • 圖文詳解Vue3沒有代碼提示問題的解決辦法

    圖文詳解Vue3沒有代碼提示問題的解決辦法

    最近在使用Vue.js時候沒有自動提示,就很難受,下面這篇文章主要給大家介紹了關于Vue3沒有代碼提示問題的解決辦法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • Vue混入mixins分發(fā)組件可復用功能

    Vue混入mixins分發(fā)組件可復用功能

    混入 (mixin) 提供了一種非常靈活的方式,來分發(fā) Vue 組件中的可復用功能。一個混入對象可以包含任意組件選項。當組件使用混入對象時,所有混入對象的選項將被“混合”進入該組件本身的選項
    2022-09-09
  • elementui源碼學習仿寫el-collapse示例

    elementui源碼學習仿寫el-collapse示例

    這篇文章主要為大家介紹了elementui源碼學習之仿寫el-collapse示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12

最新評論