vue3 setup组合api

Vue3 组合式API + Setup语法糖 如何获取组件实例? 在Vue中,组件数据双向绑定是一项非常重要的特性,它使得我们能够轻松地在组件中处理数据的变化并将其同步到视图比如我们想要在父组件中修改数据能够同步给子组件,并且子组件修改数据也能同步给父组件,使他们数据一方发生变化,则双方都发生改变。实现组件数据双向绑定有三种写法分别是常规写法v-model,下面给大家一一演示。 阅读详情


本次记录vue3相关setup和响应/组合api的使用方法

1 setup

组合api全部都只能在setup中使用,相当于入口。
setup中不能this,因为该函数调用早于data、computed、methods、DOM refs。只能访问:props、attrs、slots、emit

接收参数:setup(props,context){}。
其中普通js对象context包含字段:const {emit, attrs, slots, expose} = context,可解构,该context不是当前实例对象(getCurrentInstance()可以获取当前实例对象)

  • attrs和slots为有状态对象,不要解构
  • expose用于外部组件实例使用ref时访问本组件的方法或属性。expose({})

注意:props不能解构,否则失去响应性,可以使用toRefs转化整个props,或者toRef转化单独属性

返回值:

  • setup返回一个对象,对象属性可以在模板中使用。(返回的对象所有属性会被合并到render函数的context中,所以模板才可以使用)
  • setup返回一个函数,该函数必须为渲染函数
<!-- 示例MyBook.vue -->
<template>
  <div>{{ collectionName }}: {{ readersNumber }} {{ book.title }}</div>
</template>

<script>
  import { ref, reactive } from 'vue'

  export default {
    props: {
      collectionName: String
    },
    setup(props) {
      const readersNumber = ref(0)
      const book = reactive({ title: 'Vue 3 Guide' })

      // 暴露给 template
      return {
        readersNumber, // 该属性在模板中访问会被自动解包
        book
      }
    }
  }
</script>

返回渲染函数:

import { h, ref, reactive } from 'vue'

export default {
  setup() {
    const readersNumber = ref(0)
    const book = reactive({ title: 'Vue 3 Guide' })
    // 请注意这里我们需要显式使用 ref 的 value,不会解包
    return () => h('div', [readersNumber.value, book.title])
  }
}

2 reactive

包裹一个对象并返回该对象的响应式副本,基于ES2015的Proxy,与原对象不相等
注意:包裹的对象会进行深度代理

// 包裹普通对象
const obj = reactive({ count: 0 })
// 包裹混合对象,混合对象中的ref对象会被自动解包,此时二者都有响应式
const count = ref(1)
const obj = reactive({ count })
// 也可以后赋值
const obj = reactive({})
obj.count = count

console.log(obj.count) // 1
console.log(obj.count === count.value) // true

被包裹对象值变化时(指通过回调函数进行变化,如果在setup中直接改变则两者都会导致UI变化),如果模板引用了该对象,则会进行UI更新
如果是普通对象,则UI不会改变

<template>
  <h1>{{ state1 }}</h1>
  <button @click="change1">1</button>
  <h1>{{ state2 }}</h1>
  <button @click="change2">1</button>
</template>

<script lang="ts">
import { defineComponent, reactive, shallowReactive } from "vue";

export default defineComponent({
  abc: 1,
  setup() {
    const s1 = { name: "pp", a: { b: { c: 1 } } };
    const s2 = { name: "pp", a: { b: { c: 1 } } };
    const state1 = reactive(s1);
    const state2 = shallowReactive(s2);

    const change1 = () => {
      state1.a.b.c = 22;
    };
    const change2 = () => {
      state2.a.b.c = 999;
    };

    // 如果通过此种方式进行改变,则UI会刷新
    // setTimeout(() => {
    //   state1.a.b.c = 2222;
    //   state2.a.b.c = 333
    // }, 2000);

    return {
      state1,
      state2,
      change1,
      change2,
    };
  },
});
</script>

2.1 shallowReactive

只转换自身为响应式对象,对于自身包含的属性的值不做转换!即响应一层
与 reactive 不同,任何使用 ref 的 property 都不会被代理自动解包。

3 readonly

包裹一个对象(普通、响应式、ref),返回其只读代理,也是深度的,同样ref会自动解包

const raw = {
  count: ref(123)
}

const copy = readonly(raw)

console.log(raw.count.value) // 123
console.log(copy.count) // 123

3.1 shallowReadonly

只转换自生为只读,不嵌套执行转换属性的值
与 readonly 不同,任何使用 ref 的 property 都不会被代理自动解包。

4 isProxy isReactive isReadonly

isProxy:检查对象是否为Proxy代理对象(reactive和readonly包裹的返回都是proxy代理对象)

isReactive:检查对象是否最底层是响应式的(无论之后是否包裹了readonly等)

isReadonly:检查对象是否被readonly包裹过(包过即true)

区分这三者很简单:可以设想reactive包裹后在目标对象上添加了一个隐藏属性A,readonly包裹后会在目标对象上添加隐藏属性B,而这几种是用来判断是否包含对应隐藏属性的。
普通对象->只读->响应:由于被只读包裹后无法添加响应标记,故响应判定false,只读true
普通对象->响应->只读:由于在响应对象上添加新的只读标记,故响应和只读都可检测true

5 toRaw

该api包裹的对象会被解包到创建时的普通js对象,并获取其引用,操作该引用会改变所有对象,但不触发响应的代理副作用。

const foo = {}
const reactiveFoo = reactive(foo)
console.log(toRaw(reactiveFoo) === foo) // true

注意:只解包到是一个普通对象即停止!如果该普通对象的某些属性为代理对象,该属性不会被处理

6 markRow

该api用于标记一个普通js对象,表明其不接受转换成proxy对象,返回普通对象本身,标记只存在于第一层!!即无嵌套标记!!
即:被该api标记了的对象通过响应式或只读包裹无效!

跳过无需代理的大对象可以提高性能

不进行嵌套标记意味着:第一层标记为无嵌套对象,但是可以把第二层及更深层包装成响应式,容易混淆,所以尽量避免这种情况发生。

7 Refs相关

7.1 ref

使用ref包裹的基础数据类型会变成响应式,ref 对象仅有一个 .value property,指向该内部值。

const count = ref(0)
console.log(count.value) // 0

count.value++
console.log(count.value) // 1

注意:如果ref接收一个基础类型值,则value返回该基础类型值,如果接收的是一个对象,则value返回的是该对象的reactive包裹后的值

7.1.1 模板$refs

属于模板的一个属性:<div ref="a">123</div>
可以定义在普通DOM标签也可以定义在组件标签上

// 模板:<Father ref="father"/>
// 使用:this.$refs.father,可以获取组件实例的一个代理对象

注意:$refs不能在模板中和计算属性中使用

7.1.2 模板refs

在组合式API中即setup中使用模板ref和普通响应式ref使用方式一样

<template>
  <div ref="root">root</div>
</template>

<script>
...
setup(){
  const root = ref(null);
  onMounted(()=>console.log(root.value))
  return{root}
}
...
</script>

原因是:返回的ref如果和虚拟节点或组件的ref同名,则该节点会被绑定到ref值中,只有在挂载完和更新完才能拿到最新值。

结合v-for使用ref

<template>
  <div v-for="(item,index) of list"
    :key="index"
    :ref="el=>{if(el) rlist[index]=el}"
  >{{item.name}}</div>
</template>

<script>
...
setup(){
  const rlist= ref([]);
  return{rlist,list:[1,2,3]}
}
...
</script>

7.2 unref

语法糖:val = isRef(val) ? val.value : val

7.3 toRef

从某个响应式对象中创建一个响应式属性

一般应用场景为:响应式的某个属性为基本数据类型,所以按值传递,在处理过程中,无法影响原对象,所以使用toRef创建一个对象,这样该属性就可以按照引用进行传递了

const state = reactive({
  foo: 1,
  bar: 2
})

const fooRef = toRef(state, 'foo')

fooRef.value++
console.log(state.foo) // 2 由于传递的是引用,所以改变一个另一个也会变

state.foo++
console.log(fooRef.value) // 3 由于传递的是引用,所以改变一个另一个也会变

7.4 toRefs

将一个响应式对象所有属性全部转成Ref引用,便于解构展开

const state = reactive({
  foo: 1,
  bar: 2
})

const stateAsRefs = toRefs(state)
/*
stateAsRefs 的类型:

{
  foo: Ref<number>,
  bar: Ref<number>
}
*/

// ref 和原始 property 已经“链接”起来了
state.foo++
console.log(stateAsRefs.foo.value) // 2

stateAsRefs.foo.value++
console.log(state.foo) // 3

7.5 isRef

判断是否为ref对象

const foo = shallowRef({})
// 改变 ref 的值是响应式的
foo.value = {}
// 但是这个值不会被转换。
isReactive(foo.value) // false

7.6 shallowRef

创建一个跟踪自身 .value 变化的 ref,但不会使其值也变成响应式的,只跟踪value引用变化。浅层ref。

const foo = shallowRef({})
// 改变 ref 的值是响应式的
foo.value = {}
// 但是这个值不会被转换。
isReactive(foo.value) // false

此时更改foo的值会触发更新

  setup() {
    const info = shallowRef({name:1})
    watchEffect(()=>{
      console.log(info.value.name)
    })
    info.value={name:2} // 会触发effect
  },

此时更改foo值的嵌套属性值不会触发更新

  setup() {
    const info = shallowRef({name:1})
    watchEffect(()=>{
      console.log(info.value.name)
    })
    info.value.name=2 // 不会触发effect 可以使用trigger(info)手动触发
  },

7.7 triggerRef

当ref对象作为watchEffect的依赖时,其value的变化会触发effect,当想要手动触发依赖于该ref的effect,可以使用该函数

const shallow = shallowRef({
  greet: 'Hello, world'
})

// 第一次运行时记录一次 "Hello, world"
watchEffect(() => {
  console.log(shallow.value.greet)
})

// 这不会触发作用 (effect),因为 ref 是浅层的
shallow.value.greet = 'Hello, universe'

// 记录 "Hello, universe"
triggerRef(shallow)

7.8 customRef

接收两个参数,track和trigger,返回一个对象包括:get和set属性
在取值前调用track,在设置值后调用trigger,以让响应系统工作

function useDebouncedRef(value, delay = 200) {
  let timeout
  return customRef((track, trigger) => {
    return {
      get() {
        track() // 获取值前通知系统准备跟踪赋值前后数据变化
        return value
      },
      set(newValue) {
        clearTimeout(timeout)
        timeout = setTimeout(() => {
          value = newValue
          trigger() // 赋值结束调用trigger通知系统
        }, delay)
      }
    }
  })
}

export default {
  setup() {
    return {
      text: useDebouncedRef('hello')
    }
  }
}

8 computed

接受一个getter函数,并返回一个不可变的响应式ref对象

const count = ref(1)
const plusOne = computed(() => count.value + 1)

console.log(plusOne.value) // 2

plusOne.value++ // 错误

或者接收一个包含get和set属性的对象。

const count = ref(1)
const plusOne = computed({
  get: () => count.value + 1,
  set: val => {
    count.value = val - 1
  }
})

plusOne.value = 1
console.log(count.value) // 0

9 watchEffect

第一次执行setup函数,就会执行一次
每次依赖被改变也会执行一次

特别注意:对于数组或者对象这种引用数据类型,其中的改变无法被观察到!!!除非显式使用数组的长度或对象的某个变化属性,否则只能使用深拷贝!(可以使用lodash的_.cloneDeep(state))或者解构!

9.1 简单使用

自动收集依赖,如果依赖改变则会执行effect,该api返回一个stop函数,执行该函数可以停止该effect的触发

const count = ref(0)

const stop = watchEffect(() => console.log(count.value))
// -> logs 0

setTimeout(() => {
  count.value++
  // -> logs 1
}, 100)
setTimeout(() => {
  stop()
}, 1000)

9.2 清理函数

如需清理effect:在【依赖改变时】或者【组件卸载时】清理副作用,需要传入一个清理注册函数onInvalidate
该函数传入的回调函数执行时机为:

  1. 依赖改变后,先调用清理在重新执行effect
  2. 组件卸载前,先执行清理,再卸载
  3. stop回调前,先执行清理,再停止

使用场景有很多:如input输入框的debounce功能

const rid = ref(id)

watchEffect(async(onInvalidate) => {
  // 依赖id改变时需要获取新的数据
  const token = await getUserInfo(rid.value)
  onInvalidate(() => {
    // 在获取新数据时,取消上一次的请求,即清理上一次的作用
    token.cancel()
  })
})

watchEffect可以直接接收一个异步函数作为回调,而react不可以(需要在内部创建一个异步函数,然后同步调用)

9.3 effect在生命周期中的执行时机

默认行为:watchEffect中的effect会在组件update【之前】被调用!

可选参数

watchEffect(()=>{},{flush:'pre/post/sync'})
// pre 默认模式,effect在组件更新前执行
// post effect在组件更新后执行
// sync 同步模式,即所有effect强制同步,效率低下

同步模式即:

  setup() {
    const info = shallowRef({name:'pp'})
    console.log('1')
    watchEffect(()=>{
      console.log(info.value.name)
    },{flush:'sync'})
    console.log('2')
    info.value={name:'qq'}
    console.log('3')
  },

打印输出:
1
pp
2
qq
3

9.4 watchEffect中访问DOM

处于setup中的watchEffect无法访问DOM,因为此时组件还未挂载,如需访问需要放在onMounted生命周期中
原因:在setup中第一次effect执行时,组件尚未挂载,无法获取有关DOM的数据,如ref。组件挂载完毕,DOM上的ref被赋值,重新触发effect,此时可以获取数据。

9.5 watch debugger

watchEffect接收的第二个参数是一个options对象,包含onTrack和onTrigger两个函数,用于追踪依赖和回调触发的调试

watchEffect(
  () => {
    /* 副作用 */
  },
  {
    onTrack(e) { // 跟踪依赖和依赖改变后重新跟踪
      debugger
    },
    onTrigger(e) { // 依赖改变,回调触发
      debugger
    }
  }
)

10 watch

同watchEffect区别:
1 第一次setup不会执行,依赖改变才会执行
2 明确指定依赖
3 可以获取依赖前后变化

第一个参数:接收一个getter函数,或一个ref
第二个参数:副作用回调
第三个参数:调试options,可以深度观察:deep:true,解决数组和对象无法被观察到内部改变的问题(也可以深拷贝等)。可以立即执行:immediate:true,解决首次渲染不执行的问题。
其余行为同watchEffect一样

// 侦听一个 getter
const state = reactive({ count: 0 })
watch(
  () => state.count,
  (count, prevCount, onInvalidate) => {
    /* ... */
  }
)

// 直接侦听ref
const count = ref(0)
watch(count, (count, prevCount) => {
  /* ... */
})

// 侦听多个ref
const firstName = ref('')
const lastName = ref('')

watch([firstName, lastName], (newValues, prevValues) => {
  console.log(newValues, prevValues)
})

firstName.value = 'John' // logs: ["John", ""] ["", ""]
lastName.value = 'Smith' // logs: ["John", "Smith"] ["John", ""]

注意多个同步更改只会触发【一次】侦听器。

如果需要同步多次触发更改,有两个方法

  1. 将flush:'sync',效率低
  2. 在两次同步更改中间添加异步调用:await nextTick()
const changeValues = async () => {
  firstName.value = 'John' // 打印 ["John", ""] ["", ""]
  await nextTick()
  lastName.value = 'Smith' // 打印 ["John", "Smith"] ["John", ""]
}

11 provide/inject

对于嵌套多层的组件,想要传递参数,可以使用该api
provide:上层组件提供数据
inject:下层组件使用数据

11.1 选项API用法

// provide 上层组件提供选项
   // 静态数据-非响应式
   provide: {
     user: 'John Doe'
   }
   // 动态数据-非响应式
  provide() {
    return {
      todoLength: this.todos.length
    }
  }
  // 动态数据-响应式
  provide() {
    return {
      todoLength: Vue.computed(() => this.todos.length)
    }
  }

// inject 下层组件使用数据
  inject: ['user']

注意:如果provide使用的是【选项式API】,即使传递ref,值依然不是响应式!即接收方数据不会改变!

11.2 组合API用法

组合API每次provide一个值:provide(key,value)
每次inject一个值:inject(key,default)

// 上层组件
  setup() {
    provide('location', 'North Pole')
    provide('geolocation', {
      longitude: 90,
      latitude: 135
    })
  }

// 下层组件
  setup() {
    const userLocation = inject('location', 'The Universe')
    const userGeolocation = inject('geolocation')

    return {
      userLocation,
      userGeolocation
    }
  }

// 响应式
  setup(){
    const color = ref("red");
    provide('color',color)
    return {
      color
    }
  },

注意:使用组合api的provide,只需要传递的数据是响应式的即可

在更改传递值时,【建议】在上层组件定义该值的同时,定义一个更改该值的方法,并传递出去,不建议在子组件中直接更改该值!可以在传递时限定readonly

  setup(){
    const color = ref("red");
    const changeColor = (newColor)=>color=newColor;
    provide('color',readonly(color))
    provide('changeColor',changeColor)
  },
✨ Vue3开发,或许你需要这样使用请求API Vue3 现在已经越来越多小伙伴用上了,在很多技术群中对于Vue3的评价是很高的。这里主要讲述在vue3业务组件中使用网络请求的方案和流程。 阅读详情

相关推荐

Vue3.0组合式API:setup()函数

setup() 函数是一个新的组件选项,它是组件内部使用组合式 API 的入口。setup() 函数在组件实例创建之前,初始化 Prop 之后调用,而且setup() 函数是在 beforeCreate 钩子函数之前调用。setup() 函数可以返回一个对象或函数,对象的属性会合并到组件模板渲染的上下文中。setup() 函数可以接收两个可选的参数。第一个参数是响应式的 props 对象,第二个参数是一个上下文(context)对象。

pan_junbiao的博客 1898

vue3在setup中请求数据并使用的几种方式

虽然也能正常加载数据 但你直接在setup上用async 会发现其他例如onMounted这些写在setup中的异步声明周期不执行了。但你直接这样用的话 组件会加载不出来 要在调用组件的地方 外面套一对suspense。第二种 在其他声明周期中用 async await 以onMounted为例。最后一种 直接在setup上用 async await 不推荐。这里 我们在onMounted的声明周期函数上设置async。第一种 Promise。在里面通过await请求。

weixin_45966674的博客 5030

Vue3生命周期及当Vue3与Vue2生命周期混用时的执行顺序

Vue3生命周期及当Vue3与Vue2生命周期混用时的执行顺序

qq_37635012的博客 3065

Vue3常用的API之setup

setup是vue3中的一个新的配置项,值为一个函数,组件中运用到的所有数据、方法等等,都要配置在setup中

二七二十七的博客 1449

超详细Matlab R2021a免费安装教程(附安装包)

Matlab是一种高级技术计算语言和交互式环境,用于算法开发、数据可视化和数值计算。它集成了数学、工程和科学计算的丰富函数库,提供了强大的数据分析和绘图工具。Matlab还支持并行计算和大规模数据处理,适用于各种领域,如信号处理、图像处理、控制系统、机器学习等。

waicsdn_haha的博客 1万+

zynq7020的arm A9核降频实录

zynq arm9 cortex a9 降频

qq_40011737的博客 8764

【Vue3】初始化和Composition API(组合式)

Composition API(组合式),setup,reactive响应式数据

weixin_44899940的博客 925

SAP接口错误查询日志

随着数字经济的迅速发展,企业数字化转型不在只追求“业财一体化”,而是在业务端也想要进行更为精细化的管理,所以很多企业在SAP ERP的基础上,集成更多垂直领域更精细的外围系统,比如销售CRM系统,采购SRM系统,生产MES系统等等,琳琅满目的产品,那对SAP实施来说,系统集成过程中,接口的一些报错查询能力必不可少,今天我们就介绍一下,SAP和CRM系统集成中接口常见的报错。

weixin_43657667的博客 2047

深入理解 Vue3 的 setup 函数:组合式 API 的基石

setup() {// 定义数据let name = '张三';return {name,age// tell // 这里可以根据实际需求决定是否返回,模板中未使用可暂不返回

m0_57836225的博客 1483

基于STM32F407的定时器以及定时器中断的实现

基于STM32F407的定时器以及定时器中断的实现

weixin_57941207的博客 5228

深入了解AES_GCM算法

常见的对称加密算法,在解密过程中无法确认密钥是否正确的。这就意味着,密文可以用任何密钥执行解密运算,得到一组疑似密文;由于不知道密钥是否正确,故也不能确定解密出来的明文数据是否正确。因此,需要在对称加密算法上增加一层验证机制,常见思路为使用加密算法进行加密保证机密性,使用摘要算法计算MAC保证完整性和真实性,这就涉及到摘要计算和加密计算的前后顺序和参与计算的数据、密钥等,使用起来略微麻烦。

huaqianzkh的专栏 4187

vue3第六幕之【组合式API】setup语法糖

关于Composition(组合式)API 中setup的相关基础知识 强烈推荐!!

XSL_HR的博客 2874

STC8G1K08A 实战应用:从配置到功能实现

本文详细介绍了STC8G1K08A单片机的实战应用,从开发环境搭建、GPIO配置、ADC模块使用到定时器中断处理和PWM输出等核心功能。重点讲解了外设模块的协同工作配置技巧,并分享了实际项目开发中的经验教训,帮助开发者快速掌握STC8G1K08A的高效应用。

n4o5p6q7r的博客 391

vue3 composition(组合式)API 之 setup 入口函数

亲爱的视频版 博客内容已经录制了对应视频,点击可跳转 入口函数-setup 现在我们已经知道 为什么要使用组合式 API 了 ,那么接下来我们需要看的就是如何使用 组合式 API。 在 vue 组件之中,我们通过 setup 函数来使用 组合式 API。 那么下面我们将分别从函数的: 调用时机 this 指向 函数参数 返回值 这四个方面来解析 setup 函数 调用时机与 this 指向 setup 函数在创建组件之前被调用,所以在 setup 被执行时,组件实例并没有被创建。 因此在 setup

LGD_Sunday的专栏 3480

【思博伦】史上最详细Spirent TestCenter测试仪使用教程精讲(一)!图解超赞超详细!!!

3. 在弹出的界面中,找到菜单栏中的“Connect/Create”,选择下拉框中的“Connect to Physical/Visual Chassis”,在弹出的对话框中输入思博伦测试仪的IP地址:192.168.6.244,点击“OK”;说明:目前我们只需要使用到Raw Stream Block,不需要用到Bound Stream Block。说明:如果要使用100G模式,由于硬件限制,必须连续3个面板端口同时配置为100G使用。打开安装包,并按照提示按照即可。

风云说通信 6478

python实现MACD策略背离点的判断 (附完整源码)

python实现MACD策略背离点的判断 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 665

[深入vue3之setup] setup与组合式 API

为什么使用 setup ? 大型组件中选项的分离掩盖了潜在的逻辑问题。此外,在处理单个逻辑关注点时,我们必须不断地“跳转”相关代码的选项块。 如果能够将同一个逻辑关注点相关代码收集在一起会更好。而这正是组合式 API 使我们能够做到的。 通过创建 Vue 组件,我们可以将界面中重复的部分连同其功能一起提取为可重用的代码段。然而,光靠这一点可能并不够,尤其是当你的应用变得非常大的时候,共享和重用代码变得尤为重要。 为了开始使用组合式 API,我们首先需要一个可以实际使用它的地方。在.

从今年开始写写博客~~ 1779

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

vue3 ts setup 组合式API 使用教程

vue3中新增了组合式API,本文讲解组合式API setup 的使用。

悟世君子的博客 1880

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Vue3组合api-setup

目录 (01)setup组合api的特点: (2)setup ref值类型 响应对象 (03)reactive 引用类型 响应式 (04)watchEffect监听效果 (05)生命周期 (06)全局配置 (07)getCurrentlnstance (08)computed 属性 (01)setup组合api的特点: 更加直观,接近原生js 按需加载 没有this,降低了耦合性,提高复用性 (2)setup setup 函数也是 Compsi...

Mr_krab的博客 834

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

vue3 组合式 API:setup()

setup() 函数是在组件实例创建之前执行的,它用于组合组件的逻辑,包括响应式数据、方法、计算属性、监听等。它接收两个参数:props 和 context,并返回一个对象,其中包含可以在组件模板中使用的属性和方法。

咸鱼滚滚 1516

Vue3组合式API之Setup

组合式API诞生背景 使用过vue2.x开发过项目的人应该都清楚了其弊端,当一个组件功能较多的时候尤为明显。2.x版本的vue对于刚接触这个框架的人十分友好,简明的结构和易懂的使用方法很快就能上手。但是问题来了,当一个组件功能很多,每个功能的数据、方法以及生命钩子函数等等堆在了一起,当我们想去看某个功能的逻辑过程时,是极其繁琐的,你需要不断地上下查找编辑器的有关代码。 Setup 为了解决上面那个弊端,vue3提出了组合式api,简单地说就是把一个功能逻辑涉及到的数据、方法、生命周期、侦听器等等都收集在一起

qq_38836435的博客 845

Vue 3 组合式 API 基础:setup 函数的使用技巧

setup函数是一个在组件创建之前执行的函数,在datacomputedmethods等选项之前被调用。props和context,并且可以返回一个对象,该对象中的属性和方法可以在模板中使用。在setup函数中,可以使用ref和reactive来创建响应式数据。ref:用于创建单个值的响应式数据,通过.value来访问和修改值。reactive:用于创建对象的响应式数据,直接访问和修改对象的属性。

前端开发探索之旅 1173

Vue3中组合API-setup函数

在Vue3中中我们定义数据项和函数时,一般采用setup函数,可以使用data,但是一般b不建议使用,因为使用setup函数更符合组合API的语法规范 setup函数的使用细节: (1)setup是一个新的组件选项,作为组件中使用组合API的起点 (2)从组件生命周期来看,它的执行在组件实例创建之前Vue2的beforeCreate执行 (3)这就意味着在setup函数中this还不是组件实例,this此时是undefined (...

weixin_55690518的博客 958

【vue3】组合式API之setup()介绍与reactive()函数的使用

vue3项目中组合式API基础概念、setup()入口函数概念、 reactive()的使用

嗨,朋友你好!我是前端领域的工作者 3616

Vue3组合api setup超简单讲解

Vue3组合api setup超简单讲解

qq_44769099的博客 634

Vue3 组合式 API 核心 —— setup() 函数详解

在 Vue3 中,组合式 API(Composition API) 是一大亮点,而其中的核心就是 setup() 函数。很多初学者在写 Vue3 组件时会看到 setup(),但可能对它的执行时机、参数和返回值还比较迷糊。今天我们就系统地讲解一下 Vue3 中的 setup()。

2301_81137804的博客 1402
上一篇: 我的typescript学习心得
下一篇: 纯JS实现填字游戏实战总结
天落枫
博客等级 码龄10年 91粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值