变量、方法不需要 return 出来

  1. <script lang="ts" setup>
  2. import { ref } from 'vue';
  3. <!-- flag变量不需要在 return出去了 -->
  4. let flag=ref("开端-第一次循环")
  5. <!-- 函数也可以直接引用,不用在return中返回 -->
  6. let changeHander=():void=>{
  7. flag.value='开端-第二次循环'
  8. }
  9. </script>

组件不需要在注册

<template>
  <div class="home">
    <test-com></test-com>
  </div>
</template>
<script lang="ts" setup>
  // 组件命名采用的是大驼峰,引入后不需要在注册,是不是爽歪歪呀!
  //在使用的使用直接是小写和横杠的方式连接 test-com
  import TestCom from "../components/TestCom.vue"
</script>

语法题之前需要使用defineComponent暴露组件

<script lang="ts">
import { defineComponent } from 'vue';

export default defineComponent({
  name: 'TestCom',
});
</script>

defineProps 接受父组件数据

不需要使用setup函数 props,emit怎么获取呢?

<template>
    <div>
        <h2> 你好-我是肖鹤云</h2>
        <p>信息:{{ info}}</p>
        <p>{{ time }}</p>
    </div>
</template>

<script lang="ts" setup>
  import {defineProps} from 'vue'
  defineProps({
      info:{
          type:String,
          default:'----'
      },
      time:{
          type:String,
          default:'0分钟'
      },
  })
</script>

defineEmits 向父组件抛出事件

<script lang="ts" setup>
 import {defineEmits} from 'vue'
  //  使用defineEmits创建名称,接受一个数组
  let $myemit=defineEmits(['myAdd','myDel'])
  //触发父组件事件
  let hander1Click=():void=>{
    $myemit('myAdd','新增的数据')
  }

  let hander2Click=():void=>{
    $myemit('myDel','删除的数据')
  }
</script>

(代替$ref) defineExpose 获取子组件中的属性值

<script lang="ts" setup>
import { reactive, ref ,defineExpose } from "vue";
let sex=ref('男')
let info=reactive({
    like:'喜欢李诗晴',
    age:27
})
// 将组件中的属性暴露出去,这样父组件可以获取
defineExpose({
    sex,
    info
})
</script>
<template>
<div class="home">
  <HelloWorld ref="testRef"></HelloWorld>
  <button @click="getSonHander">获取子组件中的数据</button>
  </div>
</template>

<script lang="ts" setup>
  import test from '@/components/test.vue';
  import {ref} from 'vue'
  //类似$ref获取组件节点
  const testRef = ref()

  const getSonHander=()=>{
    console.log('获取子组件中的性别', testRef.value.sex );
    console.log('获取子组件中的其他信息', testRef.value.info );
  }
</script>

image.png

v-memo

v-memod会记住一个模板的子树,元素和组件上都可以使用。
该指令接收一个固定长度的数组作为依赖值进行[记忆比对]。
如果数组中的每个值都和上次渲染的时候相同,则整个子树的更新会被跳过。
即使是虚拟 DOM 的 VNode 创建也将被跳过,因为子树的记忆副本可以被重用。
因此渲染的速度会非常的快。
需要注意得是:正确地声明记忆数组是很重要。
开发者有责任指定正确的依赖数组,以避免必要的更新被跳过。
<li v-for="item in listArr"  :key="item.id"  v-memo="['valueA','valueB']">
    {{ item.name   }}
</li>
v-memod的指令使用较少,它的作用是:缓存模板中的一部分数据。
只创建一次,以后就不会再更新了。也就是说用内存换取时间。

style v-bind

<template>
  <span> 有开始循环了-开端 </span>  
</template>
<script setup>
  import { reactive } from 'vue'
  const state = reactive({
    color: 'red'
  })
</script>
<style scoped>
  span {
    /* 使用v-bind绑定state中的变量 */
    color: v-bind('state.color');
  }  
</style>