- 片段(Fragment)
问题: 在Vue组件中,通常只能返回一个根元素。如果需要返回多个根元素,传统的做法是包裹在一个父元素中,但这可能会影响布局或样式。
解决方案: Vue 3引入了片段(Fragment),允许组件返回多个根元素,而不需要额外的父元素。
示例代码:
plaintext
<template>
<div>Element 1</div>
<div>Element 2</div>
</template>
- Teleport(瞬移)
问题: 有时候,组件的内容需要渲染到DOM树的另一个位置,而不是组件的默认位置。
解决方案: Vue 3的Teleport允许你将组件的内容“瞬移”到DOM树的任意位置。
示例代码:
plaintext
<template>
<teleport to="#destination">
<div>This content will be rendered inside the #destination element.</div>
</teleport>
</template>
- Pinia(小菠萝)
问题: Vuex是Vue.js的状态管理库,但有时候它的复杂性和冗长性可能不适合小型项目。
解决方案: Pinia是一个更轻量级的状态管理库,适合小型到中型的Vue.js项目。
示例代码:
javascript
import { defineStore } from 'pinia'
export const useCounterStore = defineStore('counter', {
state: () => ({ count: 0 }),
actions: {
increment() {
this.count++
}
}
})
- 持久化存储
问题: 在应用刷新或关闭后,状态数据会丢失。
解决方案: 使用持久化存储(如localStorage或sessionStorage)来保存状态数据,以便在应用重新加载时恢复。
示例代码:
javascript
import { defineStore } from 'pinia'
export const useCounterStore = defineStore('counter', {
state: () => ({ count: localStorage.getItem('count') || 0 }),
actions: {
increment() {
this.count++
localStorage.setItem('count', this.count)
}
}
})
- 父子组件传参
问题: 在Vue组件中,父子组件之间需要传递数据。
解决方案: 使用defineProps和defineEmits来定义父子组件之间的数据传递。
示例代码:
plaintext
<template>
<ChildComponent :message="parentMessage" @update="handleUpdate" />
</template>
<script setup>
import { ref } from 'vue'
import ChildComponent from './ChildComponent.vue'
const parentMessage = ref('Hello from parent')
const handleUpdate = (newMessage) => {
parentMessage.value = newMessage
}
</script>
- defineModel
问题: 在Vue 3中,父子组件之间的双向数据绑定需要手动处理。
解决方案: defineModel允许你定义一个双向绑定的模型,使得子组件的变更可以直接影响父组件。
示例代码:
plaintext
<template>
<ChildComponent v-model:message="parentMessage" />
</template>
<script setup>
import { ref } from 'vue'
import ChildComponent from './ChildComponent.vue'
const parentMessage = ref('Hello from parent')
</script>
- keepAlive
问题: 在路由切换或组件切换时,组件的状态会被销毁,导致重新渲染。
解决方案: keepAlive组件可以缓存被包裹的组件,避免它们被销毁和重新创建。
示例代码:
plaintext
<template>
<keep-alive>
<component :is="currentComponent" />
</keep-alive>
</template>
<script setup>
import { ref } from 'vue'
import ComponentA from './ComponentA.vue'
import ComponentB from './ComponentB.vue'
const currentComponent = ref(ComponentA)
</script>
标签:count,vue,示例,高级,概念,Vue,Vue3,组件,import
From: https://blog.csdn.net/y19917750683/article/details/143693889