vue3-基础

一、创建vue3项目

npm init vue@latest

二、语法介绍

  1.< script setup>语法糖
<script setup>
const aa = '123'
const clickFn = () => {
  console.log(123);
}
</script>
<template>
  <div>{{ aa }}</div>
  <button @click="clickFn">aa</button>
</template>
  2.响应式函数
    2.1reactive()
       2.1.1介绍
接收一个对象类型数据的参数传入并返回一个响应式的对象
      2.1.2使用
<script setup>
    import { reactive } from 'vue'
    const rea = reactive({ aa: 123, bb: '22' })
    const clickFn = () => {
        console.log(123);
        rea.aa += 1
    }
</script>
<template>
     <div>{{ rea.aa }}</div>
     <button @click="clickFn">aa</button>
</template>
    2.2 ref()
      2.2.1介绍
接收简单类型或者对象类型的数据传入并返回一个响应式对象
      2.2.1使用
<script setup>
    import { ref } from 'vue'
    const re = ref(0)
</script>
<template>
    <div>{{ re }}</div>
</template>
    2.3比较ref和reactive
1.reactive不能处理简单类型的数据
2.ref参数类型支持更好但是必须通过.value访问修改
3.ref函数的内部实现依赖于reactive函数
​
推荐使用ref函数,更加灵活
  3.computed计算属性
      3.1使用
<script setup>
    import { ref, computed } from 'vue'
    const aa = ref([1, 2, 3, 4, 5, 6, 7, 8, 9])
    const com = computed(() => {
      return aa.value.filter(item => item > 2)
    })
    setTimeout(() => {
      aa.value.push(9, 10)
    }, 3000)
</script>
<template>
    <div>
      原值 -{{ aa }}
      计算属性-{{ com }}
    </div>
</template>
        3.2注意
1.计算属性不能直接修改dom或异步请求
2.计算属性应该是只读的
    4.watch函数
      4.1介绍
介绍
watch是用来监听一个或多个数据变化的。数据变化时执行回调函数
​
定义
watch(值, (newv, oldv) => {
  console.log(newv, oldv, 1);
},{
 immediate:true,
 deep:true
})

参数属性
immediate  立即执行
deep       深度监听
    4.2监听单个数据
<script setup>
    import { ref, watch } from 'vue'
    const aa = ref(0)
    const clickFn = () => {
      aa.value += 1
    }
    watch(aa, (newv, oldv) => {
      console.log(newv, oldv, 1);
    })
</script>
<template>
    <div>
      <button @click="clickFn">aa</button>
    </div>
</template>
    4.3.监听多个数据的变化
<script>
    import { ref, watch } from 'vue'
    const aa = ref(0)
    const bb = ref('qa')
    const clickFn = () => {
      aa.value += 1
    }
    const clickFn1 = () => {
      bb.value += 1
    }
    watch([aa, bb], (newv, oldv) => {
     //只要有其中一个数据变化就会触发 
      console.log(newv, oldv, 1);
    }, {
      immediate: true
    })
</script>
<template>
  <div>
    <button @click="clickFn">aa</button>
    <button @click="clickFn1">bb</button>
  </div>
</template>
    4.4 立即执行监听
<script setup>
    import { ref, watch } from 'vue'
    const aa = ref(0)
    const clickFn = () => {
      aa.value += 1
    }
    watch(aa, (newv, oldv) => {
      console.log(newv, oldv, 1);
    })
</script>
<template>
  <div>
    <button @click="clickFn">aa</button>
  </div>
</template>
    4.5 深度监听
<script setup>
    import { ref, watch } from 'vue'
    const aa = ref({ aa: 123 })
    const clickFn = () => {
      aa.value.aa += 1
    }
    watch(aa, (newv, oldv) => {
      console.log(newv, oldv, 1);
    }, {
      deep: true
    })
</script>
<template>
  <div>
    {{ aa.aa }}
    <button @click="clickFn">aa</button>
  </div>
</template>
    4.6 监听对象中的某个值
<script setup>
    import { ref, watch } from 'vue'
    const aa = ref({ aa: 123, bb: 235 })
    const clickFn = () => {
      aa.value.aa += 1
    }
    const clickFn1 = () => {
      aa.value.bb += 1
    }
    watch(() => aa.value.aa, (newv, oldv) => {
      console.log(newv, oldv, 1);
    }, {
      deep: true
    })
</script>
<template>
  <div>
    {{ aa.aa }}
    <button @click="clickFn">aa</button>
    <button @click="clickFn1">aa1</button>
  </div>
</template>
  5.生命周期函数
    5.1介绍
介绍
1、setup() : 开始创建组件之前,在 beforeCreate 和 created 之前执行,创建的是 data 和 method
2、onBeforeMount() : 组件挂载到节点上之前执行的函数;
3、onMounted() : 组件挂载完成后执行的函数;
4、onBeforeUpdate(): 组件更新之前执行的函数;
5、onUpdated(): 组件更新完成之后执行的函数;
6、onBeforeUnmount(): 组件卸载之前执行的函数;
7、onUnmounted(): 组件卸载完成后执行的函数;
8、onActivated(): 被包含在 <keep-alive> 中的组件,会多出两个生命周期钩子函数,被激活时执行;
9、onDeactivated(): 比如从 A 组件,切换到 B 组件,A 组件消失时执行;
10、onErrorCaptured(): 当捕获一个来自子孙组件的异常时激活钩子函数。
​
注意
生命周期函数可以执行多次,多次执行时传入的回调会在时机成熟时依次执行
    5.2使用
<script setup>
    import { onMounted } from 'vue'
    // 组件挂载
    onMounted(() => {
      console.log('组件挂载');
    })
</script>
  6.传参方法 
    6.1.父子通信
      6.1.1父传子
//在父组件中
<script setup>
    import children from './components/children.vue'
    import { ref } from 'vue'
    const data = ref('ccc')
</script>
<template>
  <div>
    <children :data="data"></children>
  </div>
</template>

//在子组件中
<script setup>
    const props = defineProps({
      data: String
    })
</script>
<template>
  <div>{{ data }}</div>
</template>
      6.1.2子传父
//在子组件中
<script setup>
    //通过defineEmits生成emit方法 数组中可以创建多个值
    const emit = defineEmits(['child'])
    const send = () => {
      emit('child', 123)
    }
</script>
<template>
    <button @click="send">aaa</button>
</template>
​
//在父组件中
<script setup>
    import children from './components/children.vue'
    const child = (data) => {
      console.log(data);
    }
</script>
<template>
  <div>
    <children @child="child"></children>
  </div>
</template>
    6.2获取dom实例或组件对象
      6.2.1使用
<script setup>
    //导入子组件
    import child from './components/children.vue'
    import { onMounted, ref } from 'vue'
    // 使用ref创建refs对象
    const aa = ref(null)
    const bb = ref(null)
    // 组件挂载完成之后获取对象
    onMounted(() => {
      console.log(aa.value);
      console.log(bb.value);
    })
</script>
<template>
  <!-- 通过ref标识绑定ref对象 -->
  <div ref="aa">
    123
  </div>
  <!-- 通过ref标识绑定组件 -->
  <child ref="bb"></child>
</template>
      6.2.2defineExpose()
    介绍
默认情况下在<script setup>语法糖下组件内部的属性和方法是不开发给父组件访问的,
可以通过defineExpose()编译宏指定那些属性和方法允许访问
    使用
//在子组件
<script setup>
    import { ref } from "vue"
    const aa = ref(0)
    //透露给父组件的值
    defineExpose({
      aa
    })
</script>
<template>
  <div>{{ aa }}</div>
</template>
​
//在父组件
<script setup>
    import child from './components/children.vue'
    import { onMounted, ref } from 'vue'
    const bb = ref(null)
    // 组件挂载完成之后获取对象
    onMounted(() => {
      console.log(bb.value.aa);
    })
</script>
<template>
  <!-- 通过ref标识绑定组件 -->
  <child ref="bb"></child>
</template>
​
    6.3.provide和inject
      6.3.1介绍
在顶层组件通过provide传数据
在底层组件通过inject接收数据
      6.3.2使用
组件嵌套关系 父组件-> children.vue -> 底层组件

//在父组件
<script setup>
    import child from './components/children.vue'
    //传值
    provide('value123', '顶层数据')
    //传响应式数据
    const aa = ref(0)
    provide('value234', aa)
    //传方法
    const setAA = () => {
     aa.value += 1
    }
    provide('value345', setAA)
</script>
<template>
 <!-- 通过ref标识绑定组件 -->
 <child ref="bb"></child>
</template>
​
//在底层组件
<script setup>
    import { inject } from "vue";
    const bb = inject('value123')
    const aa = inject('value234')
    const setAA = inject('value345')
</script>
<template>
 <div>{{ bb }}</div>
 <div>{{ aa }}</div>
 <button @click="setAA">aa</button>
</template>
  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值