学习Vue3 第四章(响应式基础-Reactive全家桶)

53 阅读1分钟

reactive

ref支持所有的类型,reactive只能支持引用类型 Array Object Map Set

reactive 是Proxy代理对象,更新的时候不能直接赋值,会破坏响应式

<template>
  <div>{{ data.list.join('-') }}</div>
  <div>{{ count }}</div>
  <div>{{ state.count }}</div>
  <button @click="add">操作</button>
</template>

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

// const data = reactive({
//   name: '林宥嘉',
// })
// let list = reactive([1, 2, 3])
let data = reactive({
  list: [1, 2, 3],
})
let state = reactive({
  count: 1,
})
let { count } = state // 解构
const add = () => {
  // list = [1, 2, 3, 4] 直接赋值,丢失了响应式 内存地址不一样
  // list.push(4)
  data.list = [1, 2, 3, 4]
  count++
  console.log(count, 'count') // 2
  console.log(state, 'state') // count属性永远是1
}
</script>

shallowReactive

只是对浅层的数据,如果是深层的数据只会改变值,不会改变视图

<template>
  <div>{{ data }}</div>
  <button @click="add">操作</button>
</template>

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

const data = shallowReactive({
  name: '林宥嘉',
  info: {
    age: 30,
  },
})

const add = () => {
  // data.name = 'yoga'
  // data.info = {
  //   age: 31,
  // }
  data.info.age = 31 // 没有响应式
  console.log(data)
}
</script>