首页 > 其他分享 >vue3.0--setup()

vue3.0--setup()

时间:2022-12-14 17:22:56浏览次数:88  
标签:console -- setup vue3.0 attrs props 组件 ref

1.setup()定义:

  setup () 是vue3新增加的组件。vue3采用了组合式 API ,为了使用组合式API,我们需要一个入口,在vue3组件中,称之为setup。(简单点来说,就是vue2里面的data,method,computed,所有数据方法全写在setup里)

 

2.setup()使用场景:

  2.1需要在非单文件组件中使用组合式 API 时。(非单文件组件指的是一个文件中包含多个vue组件)

  2.2需要在基于选项式 API 的组件中集成基于组合式 API 的代码时。(在已使用选项式api的同时要使用组合式API)

 

3.基本使用

<script>
import { ref } from 'vue'

export default {
  setup() {  //1.setup() 自身并不含对组件实例的访问权,即在 setup() 中访问 this 会是 undefined。
    const count = ref(0)

    return {  //2.需要return才可以被其他使用,<script setup>不需要return
      count
    }
  },

  mounted() { //3.返回值可以给选项式api通过this获取使用
    console.log(this.count) // 0
  }
}
</script>

<template>  //4.在模板中访问从setup返回的ref时,它会自动浅层解包,因此你无须再在模板中为它写.value
<button @click="count++">{{ count }}</button> //当通过this访问时也会解包
</template>

另:setup() 应该同步地返回一个对象。唯一可以使用 async setup() 的情况是,该组件是 Suspense 组件的后裔。

 

4.setup的参数

  4.1第一个参数props

export default {
  props: {   //1.必须使用props接收,否则setup中接收的值都为undefined
    title: String
  },
  setup(props) {
  //2.请注意如果你解构了 props 对象,解构出的变量将会丢失响应性。因此我们推荐通过 props.xxx 的形式来使用其中的 props。 console.log(props.title)
  //3.非要结构的情况下
  // 将 `props` 转为一个其中全是 ref 的对象,然后解构
  const { title } = toRefs(props)
  // `title` 是一个追踪着 `props.title` 的 ref
  console.log(title.value)
  // 或者,将 `props` 的单个属性转为一个 ref
  const title = toRef(props, 'title') } }

  4.2第二个context

// 父组件 在子组件传递一个text
  <template>
    <div class="box" style="margin: 0 auto;text-align: center;">
      <h1>我是父组件</h1>
    </div>
    <son :data="data" text="文本传输"></son>
  </template>

//子组件
import { h, ref } from 'vue'
export default {
  props:{ data:{ type:String } },
  //1.该上下文对象是非响应式的,可以安全地解构: setup(props, { attrs, slots, emit, expose }) { // 透传 Attributes(非响应式的对象,等价于 $attrs)
  console.log(context.attrs)
  // 插槽(非响应式的对象,等价于 $slots)
  console.log(context.slots)
  // 触发事件(函数,等价于 $emit)
  console.log(context.emit)
  // 暴露公共属性(函数)
  console.log(context.expose)

  //2.attrs 和 slots 都是有状态的对象,它们总是会随着组件自身的更新而更新。这意味着你应当避免解构它们,并始终通过 attrs.x 或 slots.x 的形式使用其中的属性。 //即可以解构context,但是不可以再解构attrs和slots
  //3.和 props 不同,attrs 和 slots 的属性都不是响应式的。如果你想要基于 attrs 或 slots 的改变来执行副作用,那么你应该在 onBeforeUpdate 生命周期钩子中编写相关逻辑。
  
  //4.可以获取父组件给该组件定义的text的属性值
  console.log('context>>>', context.attrs.text); //有值
  //5.attrs(获取当前标签上的所有属性的对象),但是该属性是props中没有声明接收的所有的对象。如果你使用props去获取值,同时props中你声明了你要获取的值,则:获取的值是undefined
  console.log('props>>>', props.data); //有值
  //attrs获取值是不需要props中没有声明接收 ,如果用attrs 接收 props 中的值会显示undefined
  console.log('contextTestProps>>>', context.attrs.data); //undefined

  //6.让组件实例处于 “关闭状态” 即不向父组件暴露任何东西【是向父组件暴露,父组件通过ref.value.暴露值就可以获取或者执行暴露的值或者函数】
  expose()
  //7.有选择地暴露局部状态
  const publicCount = ref(0) 
  expose({ count: publicCount })
  //8.解决因为setup返回了渲染函数,而不能返回其他的函数或者变量,使用expose来进行暴露
  const count = ref(0)
  const increment = () => ++count.value
  expose({ increment })
  //h函数是创建节点, 可实现展示template如何渲染到html中的过程
  return () => h('div', count.value)
  } }

 

标签:console,--,setup,vue3.0,attrs,props,组件,ref
From: https://www.cnblogs.com/LylePark/p/16982707.html

相关文章

  • 矩阵快速幂
    快速幂如果希望求得一个数\(a\)的\(b\)次幂,一般情况下,暴力的做法就是从\(1\)遍历到\(b\),每次遍历时都将结果乘上\(a\),得到最终结果。这种做法的时间复杂度为\(O(......
  • JavaScript内存中的一些形状的读书笔记
    原文地址:http://zoo.zhengcaiyun.cn/blog/article/code-shapeundefined和null不同的原因undefined是栈空间中表示未定义含义的一块特殊的固定的内存区域null是堆内存......
  • mybatis-plus的BaseMapper
    顾名思义,BaseMapper就是基础的mapper,我们可以通过继承BaseMapper来实现基础的CRUD功能而无需再写单独的xml文件,这个对于SQL不复杂的场景和表来说非常的友好。基本的使用......
  • dataFrame把某列类型为array<double>或者array<string>数组里的值为null的置换为非nul
    ----把array<double>里的null值转换为0:df.withColumn("Value",replaceArrayNullToZeroUDF(col("Value")))defreplaceArrayNullToNOVALUEUDF=udf(replaceArrayNullToN......
  • el-tree 刷新后保持展开状态和选中节点不变
    需求el-tree刷新后默认折叠全部节点,默认选中第一个节点(以下简称默认设置)。现在需求是:新增或编辑节点数据,要求刷新后保持展开状态和选中节点不变。思路思路一:只在第......
  • 【机器学习】李宏毅——机器学习基本概念简介
    机器学习就是找到一个我们人类无法写出来的函数来完成各种任务机器学习的任务回归Regression:输出是一个数值例如:预测未来某一个时间PM2.5数值分类Classification:输出是......
  • linux svn命令
    参考:https://blog.csdn.net/sinolover/article/details/1212445871,拉取到本地svncheckoutsvn://****2,添加svnupdatesvnadd*svncommit-m'x'svnupdates......
  • vue2 自定义指令22 directives 简写 全局自定义
      <pv-color="'red'">测试</p>  <button@click="color='green'">改变color的颜色值</button> data(){  return{   color:'blue' ......
  • 网络编程-2022-12-14
    一、网络编程基础TCPUDP编程    TCP英文叫TransmissionControlProtocol,中文叫传输控制协议,它其实就是一种网络传输协议。1、计算机网络:多台计算机地理位置不......
  • Python 闭包
    闭包概念闭包,又称闭包函数或者闭合函数,其实和前面讲的嵌套函数类似,不同之处在于,闭包中外部函数返回的不是一个具体的值,而是一个函数。一般情况下,返回的函数会赋值给一个变......