vue3中的options方式 和 composition方式,效果不一样?!

vue3中的options方式 和 composition方式,效果不一样?!

<template>

<div class="home">

<img alt="Vue logo" src="../assets/logo.jpg" />

{{ asd }}

{{ zxc }}

<button @click="test">test</button>

</div>

</template>

<script lang="ts">

import { defineComponent, ref } from "vue";

export default defineComponent({

// setup() {

// let asd = ref(1);

// let zxc = "x";

// function test() {

// asd.value = 2;

// zxc = "y";

// }

// return {

// asd,

// zxc,

// test,

// };

// },

data() {

return {

asd: 1,

};

},

methods: {

test() {

this.asd = 2;

this.zxc = "y";

},

},

created() {

this.zxc = "x";

},

});

</script>

这段代码里,setup的方案,在页面点击test,zxc的变量不会更新,但是用下面的代码,options的方式就可以更新掉,有没有大神给解释一下为什么呢这是?

问题补充:当options模式test方法中那个响应式的asd如果只是掉的话,这个zxc是不会更新的,感觉像是这个zxc之所以更新,是在响应式的变量触发dom diff更新的时候发现zxc变量有变化顺带更新了,只是猜测,,,,,但是setup就不会,是为什么呢?


回答:

zxc 不是响应式的,实际上值变化了,但不会触发页面更新,加个 ref 即可

补充,可能是页面数据刷新机制导致的

  methods: {

test() {

// this.asd = 2 + Math.random();

this.zxc = "y" + Math.random();

console.log(this.zxc);

},

},

尝试注释对响应式变量的赋值,zxc 的值不会改变


回答:

data 函数返回的对象 会被 Vue 转换成响应式对象 而setup 里面 zxc 并不会被自动转换

二改:
setup 返回的对象会被 代理到this 上面去 , zxc 因为是一个 基础类型 被直接赋值给 this了。 后续在setup外面操作的zxc跟setup里面的zxc已经没关系了。 如果是个对象因为引用的问题还能改到

以上是 vue3中的options方式 和 composition方式,效果不一样?! 的全部内容, 来源链接: utcz.com/p/937180.html

回到顶部