Vue3之setup

图片[1]-Vue3之setup-智码星河

vue3是在vue2的基础上做了一些更新,所以学vue3只是在vue2的基础上对某些东西的知识更新。在vue3的里面有些并不推荐使用的vue2的方法属性依然能使用,这个需要分清楚。

vue3里面一个最大的特点是没有了vue2的data,methods等配置项属性,随之更换的是一个叫做setup的函数。

组件中所用到的所有东西全部放在setup这个函数里面。

不管是属性,还是方法,包括生命周期函数等全写这个函数里。

这个setup函数里面的东西最终要在模板使用,所以setup函数里面的东西最终都必须return返回出来,然后再模板里面就和之前vue2一样了,直接{{}}渲染就行了。

下面是基本的setup函数定义数据的基本使用:


<template>
  <h3>{{ nm }}</h3>
  <button @click="clickFn">点击</button>
</template>
<script>
export default {
  setup() {
  //所有的东西全部写在 setup 这个函数里面  没有data对象  没有methods
    let nm = "张三";
    let clickFn = ()=>{
        nm = "李四"
      }
    //所有需要用的数据都必须最终在 setup函数里面return返回
    return {
       nm,clickFn
      };
    },
};
</script>

到这里,页面可以看到渲染的数据了,但是发现这个数据并没有响应式,例如点击按钮让nm改变,以上的写法并没有效果。

所以,需要引入一个vue3提供的函数:ref 函数

我们需要把数据包裹在ref函数里面,这样的话,这个数据就有响应式了。

为什么使用ref函数就有响应式了?

其实ref函数还是使用的get和set实现的数据响应式。只不过vue3是把这个东西写在了原型对象上。

要注意的是,加上ref函数的数据,就会转化为一个对象,而真正的数据包含在value里面,所以我们在js里面使用的时候,要加上.value才能拿到这个数据,在模板里面不用加,直接写就行。

打印下ref函数声明的nm:

图片[2]-Vue3之setup-智码星河

ref 函数


<template>
  <h3>{{ nm }}</h3>
  <button @click="clickFn">点击</button>
</template>
<script>
import {ref} from 'vue'
export default {
  setup() {
  //所有的东西全部写在 setup 这个函数里面  没有data对象  没有methods
  let nm = ref("张三");
    function clickFn() {
      nm.value = "李四"; 
    }
//所有需要用的数据都必须最终在 setup函数里面return返回
  return {
     nm,clickFn
  };
  },
};
</script>

到这里,数据就有响应式了。但是这是单个简单的数据,如果数据有多层数据的话,例如对象数据,那么这个.value的写法就不那么友好了。多层的数据每次写都要.value点下去才能拿到,所以会用到一个叫做reactive函数来解决。

reactive函数


<template>
  <h3>姓名:{{ obj.name }}</h3>
  <h3>年龄:{{ obj.age }}</h3>
  <h3>爱好:{{ obj.hobby }}</h3>
  <button @click="clickFn">点击</button>
</template>

<script>
import {reactive} from 'vue'
export default {
  setup() {
    let obj = reactive({
      name:'张三',
      age:21,
      hobby:['篮球','足球']
    })

    function clickFn() {
     obj.name = "李四"; 
     obj.age = 30; 
     obj.hobby[0] = "乒乓球"
    }

    return {
     obj,clickFn
    };
  },
};
</script>

也就是说,如果只是一个简单的变量,那么就是用ref;js中取数据要.value;

如果是一个对象或者数组,就用reactive;js中取数据不需要.value;

本站代码模板仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
文章版权声明 1 本网站名称: 智码星河
2 本站永久网址:https://wx234.cn
© 版权声明 文章版权归作者所有,未经允许请勿转载。

WX234.CN
喜欢就支持一下吧
点赞7 分享打赏
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

夸夸
夸夸
还有吗!没看够!
取消
昵称表情代码图片

    暂无评论内容