当前位置:首页 > 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 中可以通过动态组件配合递归组件实现多级弹窗。定义一个基础弹窗组件,通过递归调用自身实现层级嵌套。 基础弹窗组件模板示例: &…

vue搜索过后实现分页

vue搜索过后实现分页

Vue 实现搜索后分页功能 数据绑定与搜索逻辑 在 Vue 组件中定义必要的数据属性: data() { return { searchQuery: '', currentPa…

vue实现横向导航

vue实现横向导航

vue实现横向导航的方法 使用Flex布局实现横向导航 在Vue中可以通过Flex布局快速实现横向导航。创建一个组件,使用display: flex和flex-direction: row属性使导航项…

vue实现页面截屏

vue实现页面截屏

使用html2canvas库实现截屏 html2canvas是一个流行的JavaScript库,可以将DOM元素转换为Canvas图像。在Vue项目中安装html2canvas: npm insta…

vue实现动态路由按钮

vue实现动态路由按钮

实现动态路由按钮的思路 动态路由按钮通常指根据用户权限或角色动态显示可访问的路由按钮。Vue中可通过路由配置、权限验证和动态渲染实现。 路由配置与权限标识 在路由配置中添加meta字段标识权限:…

vue实现分片播放视频

vue实现分片播放视频

Vue实现分片播放视频的方法 分片播放视频通常用于优化大视频文件的加载和播放体验,以下是实现方法: 使用HTML5 Video标签结合Vue HTML5的<video>标签支持Medi…