vue3(语法糖)reactive数据直接赋值将失去响应式

2022-04-26  本文已影响0人  月下小酌_dbd5

1.直接赋值导致失去响应式

<template>
  <div>
    <div v-for="(item, index) in data" :key="index">{{ item }}</div>
    <button @click="onUp">长大</button>
  </div>
</template>
<script lang="ts" setup>
import { reactive } from 'vue'

let data = reactive(['小猫', '小狗'])

const onUp = () => {
  data = reactive(['大猫', '大狗'])
}
</script>

2.解决方法

<template>
  <div style="display: flex; margin-top: 30px;">
    <div v-for="(item, index) in data.animals" :key="index" style="margin-left: 10px;">{{ item }}</div>
    <button @click="onUp" style="margin-left: 10px;">长大</button>
  </div>
  <!-- user -->
</template>
<script lang="ts" setup>
import { reactive } from 'vue'

let data = reactive({
  animals: ['小猫', '小狗']
})

const onUp = () => {
  data.animals = ['大猫', '大狗']
}
</script>
<template>
  <div style="display: flex; margin-top: 30px;">
    <div v-for="(item, index) in data" :key="index" style="margin-left: 10px;">{{ item }}</div>
    <button @click="onUp" style="margin-left: 10px;">长大</button>
  </div>
  <!-- user -->
</template>
<script lang="ts" setup>
import { ref, reactive } from 'vue'

let data = ref(['小猫', '小狗'])

const onUp = () => {
  data.value = ['大猫', '大狗']
}
</script>
上一篇 下一篇

猜你喜欢

热点阅读