vue3中的setup函数

2023-05-16

原文:vue3中的setup函数_落雪小轩韩的博客-CSDN博客_vue3setup

一、概念:
setup是vue3中的一个新的配置项,值为一个函数,我们在组件中用到的数据、方法等等,都要配置在setup中。

二、详解:
setup函数的返回值有两种
1、返回一个渲染函数,可以自定义渲染内容(用得不多,了解即可)

import {h} from 'vue'
...
setup() {
    ...
    return () => h('h1','学习')
}

2、返回一个对象,对象中的属性和方法在模板中可以直接使用
(1)在vue2的配置中可读取到vue3配置中的属性和方法

methods: {
    test1() {
        console.log(this.sex);
        console.log(this.sayHello);
    }
},
setup() {
    const sex = ref('女')
    function sayHello() {
        alert('你好啊')
    }
    return {
        sex,
        sayHello
    }
}
 

(2)在vue3的配置中不能读取vue2配置中的属性和方法

data() {
    return {
        sex:'男'
    }
},
methods: {
    sayHello() {
        alert('你好啊')
    }
},
setup() {
    function test2() {
        console.log(this.sex);
        console.log(this.sayHello);
    }
    return {
        test2
    }
}
 

(3)如果vue2和vue3的配置有冲突,则vue3的setup优先

data() {
    return {
        sex:'男'
    }
},
setup() {
    const sex = ref('女')
    return {
        sex
    }
}
 

注意点:
(1)vue2和vue3的配置尽量不要混用
(2)setup不能是一个async函数,因为返回值不再是return的对象, 而是promise, 模板看不到return对象中的属性。(后期也可以返回一个Promise实例,但需要Suspense和异步组件的配合)

三、两个注意点
1、setup执行的时机
在beforeCreate之前执行一次,this是undefined。

beforeCreate(){
    console.log('beforeCreate');
},
setup(){
    console.log('setup',this);
}


2、setup的参数
1、props:值为对象,包含:组件外部传递过来,且组件内部声明接收了的属性。
在父组件中给子组件传递数据

<Demo msg="你好啊" name="tom" />

在子组件中接收

props:['msg','name'], // 需要声明一下接受到了,否则会报警告
setup(props){
    console.log(props)
}
 

并且接收到的数据被包装成一个代理对象,能够实现响应式。

2、context:上下文对象
1、attrs: 值为对象,包含:组件外部传递过来,但没有在props配置中声明的属性, 相当于 this.$attrs。

父子组件通信过程中,父组件把数据传递过来,如果子组件没有用props进行接收,就会出现在attrs中,而vm中没有

如果用props接收了,则会出现在vm上而attrs中没有

props:['msg','name']
 

2、emit: 分发自定义事件的函数, 相当于 this.$emit。
在父组件中给子组件绑定一个事件

<Demo @hello="showHelloMsg">

在子组件中触发事件并且可以传值过去

emits:['hello'], // 要声明接收到了hello事件,否则会报警告
context.emit('hello',666)

3、slots: 收到的插槽内容, 相当于 this.$slots。

<Demo>
    <template v-slot:qwe>
        <span>你好</span>
    </template>
</Demo>
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue3中的setup函数 的相关文章

随机推荐

  • swift tableview cell自适应高度

    自适应高度达到的效果 实现方法 xff1a 1 xcode新建个项目 xff0c 选择 single View Application 2 打开main storyboard 将tableview 拖到view controller中 xf
  • PHP7 MongoDB 安装与使用

    PHP7 Mongdb 扩展安装 我们使用 pecl 命令来安装 xff1a usr local php7 bin pecl install mongodb 执行成功后 xff0c 会输出以下结果 xff1a Build process c
  • Qt5.6.1+win10环境安装

    安装步骤 xff1a 下载 Qt官方网址 xff1a https download qt io new archive qt 5 6 5 6 1 下载qt opensource windows x86 mingw492 5 6 1 exe
  • WebApp打包

    HBuilder打包 HBuilder是一款前端开发的工具 xff0c 可以到http www dcloud io 下载 下载安装后我们就开始打包已有项目了 xff0c 我们以vue项目为例 xff0c 保证vue项目正常运行 xff0c
  • 蓝牙模块基础认知

    一 模块类型 1 经典蓝牙模块 BT xff1a 泛指支持蓝牙协议4 0以下的模块 xff0c 一般用于数据量比较大的传输 经典蓝牙模块可再细分为 传统蓝牙模块和高速蓝牙模块 2 低功耗蓝牙模块 BLE xff1a 指支持蓝牙协议 4 0
  • Ubuntu下 Rust 交叉编译 Windows程序

    Ubuntu下 Rust 交叉编译 Windows程序 系统版本信息安装添加工具链执行交叉编译 系统版本信息 前提 xff1a 已根据Rust官网安装配置好Rust 当前系统信息如下 Ubuntu 22 04 LTS x64rustup 1
  • golang中日期操作,日期格式化,日期转换

    golang中并没有像java一样提供类似yyyy MM dd HH mm ss格式的操作 xff0c 而是将其定义为golang的诞生时间 xff1a 2006 01 02 15 04 05 0700 MST 注意这在golang的日期格
  • windows11连接无线网后分享热点连接不上

    一直很喜欢用电脑连接无线网再开热点的方式 xff0c 一个是学校热点一次只能连接两个设备 xff0c 另一个是感觉电脑发出的无线信号比较稳定 但是最近用电脑开热点发现虽然手机能连上 xff0c 但是显示无网络连接 xff0c 就是打不开网页
  • C语言实现——顺序栈(top开始为0,也就是top指针指向下一个我们能够插入的地方)

    span class token macro property span class token directive hash span span class token directive keyword define span span
  • Linux查询服务器保修信息

    dmidecode grep 34 System Information 34 A9 egrep 34 Manufacturer Product Serial 34
  • ubuntu20.04下配置深度学习环境GPU

    卸载子系统 C Users thzn gt wsl list 适用于 Linux 的 Windows 子系统分发版 docker desktop 默认 docker desktop data Ubuntu 18 04 Ubuntu 22 0
  • SpringSecurity登陆接口

    接下我们需要自定义登陆接口 xff0c 然后让SpringSecurity对这个接口放行 让用户访问这个接口的时候不用登录也能访问 在接口中我们通过AuthenticationManager的authenticate方法来进行用户认证 所以
  • 【ubuntu20】filezilla连接主机和ubuntu20

    1 普通用户登录 sudo apt update sudo apt install openssh server 安装ssh br sudo systemctl status ssh 确认是否运行 br sudo ufw allow ssh
  • CentOS7+Nginx+阿贝云服务器使用心得

    最近有一个项目需要使用云服务器展示demo xff0c 由于是临时使用就想找一个免费的云服务器 由于以前在阿里云 腾讯云 华为云 百度云 亚马逊云都用过免费版 xff0c 这次就在网上搜了一下其它的免费云 正好就找到了阿贝云 https w
  • WSL2运行sudo gnome-session没反应

    必须注意当前用户 xff0c 不一定是在root下创建的gnome session xff0c 以我为例 xff0c 我当时是在leo用户下安装的gnome session xff0c 但之后一直都是以root用户登录 xff0c 所以运行
  • n个人围成一圈,第一个开始报数(1-3),凡报数3退出。问最后留下的人是原来第几号?

    include lt stdio h gt int main int i 61 0 j 61 0 k 61 0 n x int a 100 printf 34 please input a nu 34 scanf 34 d 34 amp n
  • 使用sea-orm执行migrate

    源码github地址 seaormdemo 一 下载工具链 sea orm cli 是sea orm 提供的工具链 xff0c 可通过cargo下载 cargo span class token function install span
  • PVE安装更新源错误

    pve系统ping 网络不通且不能进行apt install 描述 root 64 xuyuquan span class token comment apt get update span Err 1 http ftp debian or
  • failed to run command ‘java’: No such file or directory

    failed to run command java No such file or directory 程序里远程执行shell命令 xff08 nohup java jar xff09 的执行 xff0c 后台日志报错如下 xff1a
  • vue3中的setup函数

    原文 xff1a vue3中的setup函数 落雪小轩韩的博客 CSDN博客 vue3setup 一 概念 xff1a setup是vue3中的一个新的配置项 xff0c 值为一个函数 xff0c 我们在组件中用到的数据 方法等等 xff0