vue3
setup函数
<div>叫哥哥
<button @click="btn">点一点</button>
</div>
</template>
<script>
export default {
name:'',
// setUp特征
// 2vue没有this
// 3必须return {}
// 执行时机比beforeCreate还要早
setup(){
// console.log(this,888);
const btn=()=>{
console.log(111)
}
return {btn}
}
}
</script>
<style>
</style>
setup语法糖
<template>
<div>setup语法糖哦不需要return
<button @click="btn">好好学习天天向上</button>
</div>
</template>
<script setup>
console.log('啦啦啦',this)
const btn=()=>{
console.log('我是爱你的')
}
</script>
<style>
</style>
reactive函数
reactive是一个函数,它可以定义一个复杂数据类型,成为响应式数据
<template>
<div>
御剑乘风来,除魔天地间!===Reactive===={{obj.count}}
<button @click="btn">我真的开心的很</button>
</div>
</template>
<script>
import { reactive } from '@vue/reactivity'
export default{
name:'',
setup(){
const obj=reactive({
count:1
})
const btn=()=>{
console.log('btn')
obj.count+=2
console.log(obj,77)
}
return {obj,btn}
}
}
</script>
<style lang='less' scoped>
</style>
<template>
<div>
叫哥哥====vue3==toRef==={{obj.count}}==={{count}}
<button @click="btn">点一点更开心</button>
</div>
</template>
<script>
import {reactive,toRef} from 'vue'
export default {
name:'',
setup(){
let obj=reactive({
count:1
})
let count =toRef(obj,'count')
const btn=()=>{
count.value += 5
}
return {obj,count,btn}
}
}
</script>
toRef函数
toRef是函数,转换**响应式对象**中**某个**属性为单独响应式数据,并且**值是关联的
<template>
<div>
叫哥哥====vue3==toRef==={{obj.count}}==={{count}}
<button @click="btn">点一点更开心</button>
</div>
</template>
<script>
import {reactive,toRef} from 'vue'
export default {
name:'',
setup(){
let obj=reactive({
count:1
})
let count =toRef(obj,'count')
const btn=()=>{
count.value += 5
}
return {obj,count,btn}
}
}
</script>
<style>
</style>
ref
<template>
<div>
御剑乘风来,除魔天地间!===vue3===ref==={{count}}===={{str}}==={{btn}}
<button @click="btn">小齐齐</button>
</div>
</template>
<script>
import {ref} from 'vue'
export default{
name:'',
setup () {
let count =ref(1)
let str=ref('rose')
let flag=ref(false)
const btn=()=>{
count.value+=3,
str.value='dd',
flag.value=true
}
return {count,btn,str}
}
}
</script>
<style lang='less' scoped>
</style>
<div>
御剑乘风来,除魔天地间!===vue3====refDom
<h2 ref="dom" :style="{color:red}">我是h3</h2>
</div>
</template>
<script>
import {ref,onMounted} from 'vue'
export default{
name:'',
setup () {
const dom=ref('null')
const red=ref('red')
onMounted(()=>{
console.log(dom.value)
})
return {dom,red}
}
}
</script>
<style lang='less' scoped>
</style>
<template>
<div>
御剑乘风来,除魔天地间!===vue3 {{obj.x}}===={{obj.y}}
</div>
</template>
<script>
import {reactive,onMounted} from 'vue'
export default{
name:'',
setup () {
const obj=reactive({
x:0,
y:0
})
onMounted(()=>{
window.addEventListener('mousemove',(e)=>{
obj.x=e.pageX
obj.y=e.pageY
})
})
return {obj}
}
}
</script>
<style lang='less' scoped>
</style>
ref和computed实现数据求和
<template>
<div>
御剑乘风来,除魔天地间!===vue3==={{total}}===={{tota2}}
</div>
</template>
<script>
import {ref,computed} from 'vue'
export default{
name:'',
setup () {
const arr=ref([1,4,50])
const total=computed(()=>{
return arr.value.reduce((sum,item)=>sum+item,0)
})
const tota2=computed(()=>{
return 'total2'
})
return {total,tota2}
}
}
</script>
<style lang='less' scoped>
</style>
<template>
<div>
御剑乘风来,除魔天地间!===vue3====refDom
<h2 ref="dom" :style="{color:red}">我是h3</h2>
</div>
</template>
<script>
import {ref,onMounted} from 'vue'
export default{
name:'',
setup () {
const dom=ref('null')
const red=ref('red')
onMounted(()=>{
console.log(dom.value)
})
return {dom,red}
}
}
</script>
<style lang='less' scoped>
</style>
watch监听
<template>
<div>
御剑乘风来,除魔天地间!===watch===={{obj.count}}
<button @click="btn">小齐齐</button>
</div>
</template>
<script>
import {reactive, watch} from 'vue'
export default{
name:'',
setup () {
const obj=reactive({
count:1
})
const obj2=reactive({
count:4
})
const btn=()=>{
obj.count+=5
}
watch(()=>obj,()=>{
console.log(11484891)
},{
immediate:true,
deep:true
})
return {obj,btn}
}
}
</script>
<style lang='less' scoped>
</style>
watchEffect
<template>
<div>
御剑乘风来,除魔天地间!===vue3===
<button @click="btn">叫齐哥</button>
</div>
</template>
<script>
import {ref,watchEffect} from 'vue'
export default{
name:'',
setup () {
const obj=ref(null)
const btn=()=>{
count.value+=7
}
watchEffect(()=>{
console.log('ss')
})
return {obj}
}
}
</script>
<style lang='less' scoped>
</style>
provide inject
<template>
<div>
御剑乘风来,除魔天地间
<Son></Son>
</div>
</template>
<script>
import {provide} from 'vue'
import Son from './son.vue'
export default{
name:'',
components:{Son},
setup () {
provide('msg',123)
}
}
</script>
<style lang='less' scoped>
</style>
<template>
<div>
御剑乘风来,除魔天地间!===vue3rrrr
</div>
</template>
<script>
import {inject} from 'vue'
export default{
name:'',
setup () {
const m=inject('msg')
console.log(m,'55')
}
}
</script>
<style lang='less' scoped>
</style>