当前位置:首页 > VUE

用VUE3实现

2026-01-22 18:23:25VUE

以下是使用 Vue 3 实现常见功能的代码示例和说明,采用 Composition API 风格:

基础组件结构

<template>
  <div>
    <h1>{{ title }}</h1>
    <button @click="increment">Count: {{ count }}</button>
  </div>
</template>

<script setup>
import { ref } from 'vue'

const title = ref('Vue 3 Demo')
const count = ref(0)

const increment = () => {
  count.value++
}
</script>

响应式数据管理

import { reactive, computed } from 'vue'

const state = reactive({
  items: [],
  filter: ''
})

const filteredItems = computed(() => {
  return state.items.filter(item => 
    item.name.includes(state.filter)
  )
})

生命周期钩子

import { onMounted, onUnmounted } from 'vue'

onMounted(() => {
  console.log('组件已挂载')
  window.addEventListener('resize', handleResize)
})

onUnmounted(() => {
  window.removeEventListener('resize', handleResize)
})

组件通信

父组件:

<template>
  <ChildComponent 
    :message="parentMessage"
    @update="handleUpdate"
  />
</template>

<script setup>
import ChildComponent from './ChildComponent.vue'

const parentMessage = ref('Hello from parent')

const handleUpdate = (newValue) => {
  console.log('Received:', newValue)
}
</script>

子组件:

<template>
  <div>
    <p>{{ message }}</p>
    <button @click="emitUpdate">Send</button>
  </div>
</template>

<script setup>
const props = defineProps({
  message: String
})

const emit = defineEmits(['update'])

const emitUpdate = () => {
  emit('update', 'New value from child')
}
</script>

状态管理(Pinia)

安装Pinia:

npm install pinia

创建store:

用VUE3实现

// stores/counter.js
import { defineStore } from 'pinia'

export const useCounterStore = defineStore('counter', {
  state: () => ({ count: 0 }),
  actions: {
    increment() {
      this.count++
    }
  }
})

组件中使用:

import { useCounterStore } from '@/stores/counter'

const counter = useCounterStore()

// 读取状态
console.log(counter.count)

// 调用action
counter.increment()

路由管理

安装Vue Router:

npm install vue-router@4

路由配置:

用VUE3实现

import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
  history: createWebHistory(),
  routes: [
    { path: '/', component: Home },
    { path: '/about', component: About }
  ]
})

组件中使用:

import { useRoute, useRouter } from 'vue-router'

const route = useRoute()
const router = useRouter()

// 获取当前路由参数
console.log(route.params)

// 导航跳转
router.push('/about')

异步请求

使用axios示例:

import { ref } from 'vue'
import axios from 'axios'

const data = ref(null)
const loading = ref(false)
const error = ref(null)

const fetchData = async () => {
  loading.value = true
  try {
    const response = await axios.get('https://api.example.com/data')
    data.value = response.data
  } catch (err) {
    error.value = err
  } finally {
    loading.value = false
  }
}

// 调用
fetchData()

组合式函数封装

封装鼠标位置跟踪:

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

export function useMouse() {
  const x = ref(0)
  const y = ref(0)

  const update = (e) => {
    x.value = e.pageX
    y.value = e.pageY
  }

  onMounted(() => window.addEventListener('mousemove', update))
  onUnmounted(() => window.removeEventListener('mousemove', update))

  return { x, y }
}

组件中使用:

import { useMouse } from '@/composables/useMouse'

const { x, y } = useMouse()

这些示例涵盖了Vue 3的核心功能,包括响应式系统、组件通信、状态管理、路由和实用工具封装。根据具体需求可进一步扩展和组合这些模式。

分享给朋友:

相关文章

vue调用后台接口实现

vue调用后台接口实现

Vue调用后台接口的实现方法 在Vue项目中调用后台接口通常涉及以下几个关键步骤: 安装axios axios是一个基于Promise的HTTP客户端,适合与Vue配合使用。可以通过npm或yarn…

vue实现$.extend

vue实现$.extend

Vue 实现类似 jQuery 的 $.extend 功能 在 Vue 中实现类似 jQuery 的 $.extend 功能,可以通过多种方式完成。$.extend 主要用于合并多个对象的属性,Vue…

vue实现换行

vue实现换行

Vue 中实现换行的几种方法 在 Vue 中实现换行可以通过多种方式,具体取决于使用场景和需求。以下是常见的几种方法: 使用 HTML 的 <br> 标签 在模板中直接使用 <br…

vue 实现视频

vue 实现视频

Vue 实现视频播放功能 使用 Vue 实现视频播放功能可以通过 HTML5 的 <video> 标签或第三方库(如 video.js)来实现。以下是两种常见的方法: 使用 HTML5…

vue实现api

vue实现api

Vue 实现 API 调用 在 Vue 中调用 API 通常涉及使用 axios 或 fetch 发送 HTTP 请求,并结合 Vue 的响应式特性管理数据。以下是常见的实现方式: 安装 axios…

vue实现树形

vue实现树形

Vue 实现树形组件 在 Vue 中实现树形结构通常需要递归组件和动态数据绑定。以下是实现树形组件的几种常见方法。 递归组件实现 递归组件是 Vue 中实现树形结构的核心方法。通过组件调用自身,可以…