vue3 setup

setup  

setup是一个新的组件选项,作为组件中使用组合API的起点。 
从组件生命周期来看,它的执行在组件实例创建之前vue2.x的beforeCreate执行。
这就意味着在setup函数中this 还不是组件实例,this此时是undefined
在模版中需要使用的数据和函数,需要在setup返回。
 

<template>
  <div class="container">
    <h1 @click="say()">{{msg}}</h1>
  </div>
</template>
<script>
export default {
  setup () {
    console.log('setup执行了')
    console.log(this)
    // 定义数据和函数
    const msg = 'hi vue3'
    const say = () => {
      console.log(msg)
    }
 
    return { msg , say}
  },
  beforeCreate() {
    console.log('beforeCreate执行了')
    console.log(this)
  }
}
</script>

script setup 语法糖

<script setup></script>

生命周期

1.setup方法里面组件还没有完全挂载,需要用挂载的生命周期钩子函数

2.setup生命周期钩子函数没有beforeCreate和created

3.setup中生命周期钩子函数前面加on

4.onBeforeMount 挂载前

5.onBeforeUpdate 更新前

6.onBeforeUnmount 卸载前

7.onMounted 挂载完毕

8.onUpdated 更新完毕

9.onUnmount 卸载后

依赖注入

inject()

<script setup>
import { inject } from 'vue'
import { fooSymbol } from './injectionSymbols'
 
// 注入值的默认方式
const foo = inject('foo')
 
// 注入响应式的值
const count = inject('count')
 
// 通过 Symbol 类型的 key 注入
const foo2 = inject(fooSymbol)
 
// 注入一个值,若为空则使用提供的默认值
const bar = inject('foo', 'default value')
 
// 注入一个值,若为空则使用提供的工厂函数
const baz = inject('foo', () => new Map())
 
// 注入时为了表明提供的默认值是个函数,需要传入第三个参数
const fn = inject('function', () => {}, false)
</script>

provide

提供一个值,可以被后代组件注入。

<script setup>
import { ref, provide } from 'vue'
import { fooSymbol } from './injectionSymbols'
 
// 提供静态值
provide('foo', 'bar')
 
// 提供响应式的值
const count = ref(0)
provide('count', count)
 
// 提供时将 Symbol 作为 key
provide(fooSymbol, count)
</script>

响应式核心

ref() 

接受一个内部值,返回一个响应式的、可更改的 ref 对象,此对象只有一个指向其内部值的属性

// 导入ref响应数据
    import {ref} from 'vue'
 
// 定义num默认值是 5
    const num = ref(5);
    // 定义更新num的方法
    const setNum =(v)=>{
        num.value=v;
}

reactive() 

创建一个响应式对象:

const obj = reactive({ count: 0 })
obj.count++

computed()

接受一个 getter 函数,返回一个只读的响应式 ref 对象。该 ref 通过 .value 暴露 getter 函数的返回值。它也可以接受一个带有 get 和 set 函数的对象来创建一个可写的 ref 对象。

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

console.log(plusOne.value) // 2

plusOne.value++ // 错误

watchEffect()

第一个参数就是要运行的副作用函数。这个副作用函数的参数也是一个函数,用来注册清理回调。清理回调会在该副作用下一次执行前被调用,可以用来清理无效的副作用,例如等待中的异步请求

第二个参数是一个可选的选项,可以用来调整副作用的刷新时机或调试副作用的依赖。

const count = ref(0)

watchEffect(() => console.log(count.value))
// -> 输出 0

count.value++
// -> 输出 1

watch()

侦听一个或多个响应式数据源,并在数据源变化时调用所给的回调函数。

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

readonly()

接受一个对象 (不论

const original = reactive({ count: 0 })

const copy = readonly(original)

watchEffect(() => {
  // 用来做响应性追踪
  console.log(copy.count)
})

// 更改源属性会触发其依赖的侦听器
original.count++

// 更改该只读副本将会失败,并会得到一个警告
copy.count++ // warning!

是响应式还是普通的) 或是一个 ref,返回一个原值的只读代理

全局创建

app.use(createPinia()).mount()

全局方法

app.config.globalProperties

一个用于注册能够被应用内所有组件实例访问到的全局属性的对象。

app.config.globalProperties.$reverse = function(str){
       return str.split('').reverse().join('');
   }

组件相关

defineProps()   定义props

const props = defineProps({
  foo: String
})

defineEmits()   发送事件

const emits = defineEmits(["update:modelValue","clear"])

defineExpose()  

// 暴露一个clear方法让父组件可以通过ref调用
 defineExpose({
 clear
 })

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值