Skip to content

reactive + effect 官方实现演示

这里会对 Vue 原生 reactivity 模块中的 reactiveeffect 做一个最小、脱离模板系统的演示。

⚠️ 注意:本示例刻意绕开 Vue 的模板更新机制, 直接使用 effect 操作 DOM,用于理解响应式本质。

Demo 代码

vue
<template>
    <div ref="wrapper"></div>
</template>

<script setup>
import { reactive, effect, onMounted, onBeforeUnmount, ref } from 'vue'

const wrapper = ref(null)

const state = reactive({
    name: '小李大人',
    age: 18
})

console.log(state)

let stopEffect

onMounted(() => {
    stopEffect = effect(() => {
        if (wrapper.value) {
            wrapper.value.innerHTML = `姓名:${state.name},年龄:${state.age}`
        }
    })

    setTimeout(() => {
        state.age++
    }, 1000)
})

onBeforeUnmount(() => {
    stopEffect && stopEffect()
})
</script>

控制台输出: 控制台输出