vueuse 上手指南

3,931 阅读2分钟

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战

概念

首先放出vueuse的官网:vueuse.org/

VueUse 是一组基于Composition API的实用函数。

你可以在vue2/3,和nuxt中使用它,省去很多繁琐的代码书写。

如果你还没有使用Composition API的习惯,你可以尝试学习Composition API的基本概念。

install

推荐大家使用pnpm,至于为什么?可以看他的详细文档。pnpm.io/installatio…

pnpm i @vueuse/core

useage

只需从中导入您需要的功能 @vueuse/core

import { useMouse, usePreferredDark, useLocalStorage } from '@vueuse/core'

export default {
  setup() {
    // tracks mouse position
    const { x, y } = useMouse()

    // is user prefers dark theme
    const isDark = usePreferredDark()

    // persist state in localStorage
    const store = useLocalStorage(
      'my-storage', 
      {
        name: 'Apple',
        color: 'red',
      },
    )

    return { x, y, isDark, store }
  }
}
import { useMouse, usePreferredDark, useLocalStorage } from '@vueuse/core'

export default {
  setup() {
    // tracks mouse position
    const { x, y } = useMouse()

    // is user prefers dark theme
    const isDark = usePreferredDark()

    // persist state in localStorage
    const store = useLocalStorage(
      'my-storage', 
      {
        name: 'Apple',
        color: 'red',
      },
    )

    return { x, y, isDark, store }
  }
}

自动导入

另外我们可以使用vite自动导入的插件

import AutoImport from 'unplugin-auto-import/vite'

于是在vite配置中,我们可以

export default defineConfig({
  plugins: [
    ...,
    AutoImport({
      imports: ['@vueuse/core'],
      dts: 'src/auto-imports.d.ts',
      ...
    })
  ],
  // 预构建vueuse的包
  optimizeDeps: {
    include: [..., '@vueuse/core']
  }
})

这样我们就在项目中,直接使用vueuse的api,节约导入的步骤。

注意

VueUse 中的大多数函数都会返回一个refs 对象,我们可以使用ES6 的对象解构语法来获取您需要的内容。

import { useMouse } from '@vueuse/core'

// "x" and "y" are refs
const { x, y } = useMouse()

console.log(x.value)

const mouse = useMouse()

console.log(mouse.x.value)

如果您更喜欢将它们用作对象属性样式,则可以使用reactive().

import { reactive } from 'vue' 
import { useMouse } from '@vueuse/core'

const mouse = reactive(useMouse())

// "x" and "y" will be auto unwrapped, no `.value` needed
console.log(mouse.x)

nuxt

从 v7.2.0 开始,我们发布了一个 Nuxt 模块来启用 Nuxt 3 和 Nuxt Bridge 的自动导入。

npm i -D @vueuse/nuxt
npm i -D @vueuse/nuxt
// nuxt.config.js
export default {
  buildModules: [
    '@vueuse/nuxt'
  ]
}
// nuxt.config.js
export default {
  buildModules: [
    '@vueuse/nuxt'
  ]
}

然后在你的 Nuxt 应用程序的任何地方使用 VueUse 函数。例如:

<script setup lang="ts">
const { x, y } = useMouse()
</script>

<template>
  <div>pos: {{x}}, {{y}}</div>
</template>
<script setup lang="ts">
const { x, y } = useMouse()
</script>

<template>
  <div>pos: {{x}}, {{y}}</div>
</template>