vue实现动态刷新
Vue 实现动态刷新
使用 Vue 的响应式数据绑定
Vue 的核心特性是响应式数据绑定,当数据发生变化时,视图会自动更新。可以通过修改 data 中的属性实现动态刷新。
<template>
<div>{{ message }}</div>
</template>
<script>
export default {
data() {
return {
message: '初始消息'
}
},
methods: {
updateMessage() {
this.message = '更新后的消息'
}
}
}
</script>
使用 v-if 或 v-show 控制显隐
通过条件渲染指令动态显示或隐藏元素,v-if 会销毁和重建 DOM,v-show 仅切换 CSS 的 display 属性。
<template>
<div v-if="isVisible">动态显示的内容</div>
<button @click="toggleVisibility">切换显示</button>
</template>
<script>
export default {
data() {
return {
isVisible: true
}
},
methods: {
toggleVisibility() {
this.isVisible = !this.isVisible
}
}
}
</script>
使用 v-for 动态渲染列表
通过 v-for 指令动态渲染列表,当列表数据变化时,视图会自动更新。
<template>
<ul>
<li v-for="item in items" :key="item.id">{{ item.name }}</li>
</ul>
<button @click="addItem">添加项目</button>
</template>
<script>
export default {
data() {
return {
items: [
{ id: 1, name: '项目1' },
{ id: 2, name: '项目2' }
]
}
},
methods: {
addItem() {
this.items.push({ id: this.items.length + 1, name: `项目${this.items.length + 1}` })
}
}
}
</script>
使用 watch 监听数据变化
通过 watch 监听数据变化,并在回调中执行相关逻辑。
<template>
<div>{{ count }}</div>
<button @click="increment">增加</button>
</template>
<script>
export default {
data() {
return {
count: 0
}
},
watch: {
count(newVal, oldVal) {
console.log(`计数从 ${oldVal} 变为 ${newVal}`)
}
},
methods: {
increment() {
this.count++
}
}
}
</script>
使用 computed 计算属性
通过 computed 计算属性动态生成数据,当依赖的数据变化时,计算属性会自动更新。
<template>
<div>{{ fullName }}</div>
<input v-model="firstName" placeholder="名" />
<input v-model="lastName" placeholder="姓" />
</template>
<script>
export default {
data() {
return {
firstName: '张',
lastName: '三'
}
},
computed: {
fullName() {
return `${this.firstName} ${this.lastName}`
}
}
}
</script>
使用 $forceUpdate 强制更新
在某些特殊情况下,可能需要手动强制更新视图,可以使用 $forceUpdate 方法。
<template>
<div>{{ message }}</div>
<button @click="forceUpdate">强制更新</button>
</template>
<script>
export default {
data() {
return {
message: '初始消息'
}
},
methods: {
forceUpdate() {
this.message = '更新后的消息'
this.$forceUpdate()
}
}
}
</script>
使用 key 强制重新渲染组件
通过改变 key 的值强制重新渲染组件,适用于需要完全重置组件状态的场景。
<template>
<ChildComponent :key="componentKey" />
<button @click="reloadComponent">重新加载组件</button>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
components: {
ChildComponent
},
data() {
return {
componentKey: 0
}
},
methods: {
reloadComponent() {
this.componentKey += 1
}
}
}
</script>
使用 Vuex 或 Pinia 管理状态
对于大型应用,可以使用状态管理工具(如 Vuex 或 Pinia)管理全局状态,实现跨组件动态刷新。
<template>
<div>{{ $store.state.message }}</div>
<button @click="updateMessage">更新消息</button>
</template>
<script>
export default {
methods: {
updateMessage() {
this.$store.commit('setMessage', '新的全局消息')
}
}
}
</script>
使用异步数据更新
通过异步操作(如 API 请求)获取数据并更新视图。
<template>
<div>{{ data }}</div>
<button @click="fetchData">获取数据</button>
</template>
<script>
export default {
data() {
return {
data: null
}
},
methods: {
async fetchData() {
const response = await fetch('https://api.example.com/data')
this.data = await response.json()
}
}
}
</script>






