Java登陆第三十七天——VUE3响应式基础、条件渲染、列表渲染

响应式数据

什么是响应式数据?
	当数据发生改变时,DOM树的内容,会和数据同步更新。
	vue3不是自动响应式数据,需要经过函数处理得到响应式数据对象。

ref和reactive

这两个函数都会返回响应式数据对象,但也有不同。

ref

ref通常用于将一个基本类型转为响应式数据对象。

基本类型包括:数、字符串、布尔值、null和undefined。

读写值(访问和修改属性值)

  • 在script标签中,通过该对象.value属性,读写值。

  • 在template标签中,直接访问该对象,读写值。

栗子

App.vue

<script setup>
//ref,reactive
import {ref, reactive} from 'vue'
//虽然ref和reactive都是响应式数据函数,但ref更常用于基本类型,reactive更常用于对象。
let str1 = ref(10);
let str2 = ref("msg");
</script>

<template>
<!--在事件绑定中,可以直接写一些简单的处理器-->
  <h3 v-text="str1"></h3>
  <button @click="str1++">按钮1</button>
  <h3 v-text="str2"></h3>
  <button @click="str2='hello'">按钮2</button>
</template>

<style scoped>
</style>

效果展示
image

reactive

reactive通常用于将一个对象转为响应式数据对象。

对象包括:数组,对象等。

读写值(访问和修改属性值)

可以直接访问该对象读写值。

栗子

App.vue

<script setup>
//ref,reactive
import {ref, reactive} from 'vue'
//虽然ref和reactive都是响应式数据函数,但ref更常用于基本类型,reactive更常用于对象。
//对象
let str3 = reactive({name: "张三", age: 18});
//数组
let str4 = reactive([ {name: "张三", age: 18}, {name: "李四", age: 18}, {name: "王五", age: 18} ]);
</script>

<template>
  <!--在事件绑定中,可以直接写一些简单的处理器-->
  <h3>{{str3.age}}</h3>
  <button @click="++str3.age">按钮1</button>
  <h3 v-text="str4"></h3>
</template>

<style scoped>
</style>

效果展示(栗子中去掉了ref的代码)
image

可以发现str4展示的好丑啊。没关系,在列表渲染中可以展示的更加完善。

条件渲染

条件渲染专门负责布尔表达式被满足时,才展示的数据/标签。

提供了三种条件渲染命令:v-if、v-else和v-show

语法格式如下:

<标签 v-if=" 布尔表达式 "></标签>
	<标签 v-else=" 与v-if的布尔表达式相反 "></标签>
//类似于Java中的if和else

<标签 v-show=" 布尔表达式 "></标签>

条件渲染的特点:

  1. 同Java一样,v-else不能单独出现,必须跟随v-if。

  2. 某个标签的v-if的布尔表达式不被满足时,DOM树中不会出现该标签。

  3. 某个标签的v-show的布尔表达式不被满足时,DOM树中依然会出现该标签,只是display属性为none。

栗子

App.vue

<script setup>
import {ref} from 'vue';
//响应式数据,及时更新dom树
let flag = ref(true);
</script>

<template>
  <!--展示条件渲染2、3特点-->
  <h3 v-if="false">hello v-if!</h3>
  <h3 v-show="false">hello v-show!</h3>

  <h3 v-if="flag">hello world!我是flag为T</h3>
  <h3 v-else>hello world!我是flag为F</h3>
  <button @click="flag = !flag">切换flag</button>
</template>

<style scoped>
</style>

效果展示
image
当v-if的布尔表达式不成立时,DOM树中不会出现该内容。

列表渲染

列表渲染可以遍历。经常基于一个数组对象来渲染一个列表。

提供了一种列表渲染命令:v-for

语法格式如下:

<标签 v-for="item in items"></标签>

文本渲染的特点:

  1. item in items类似与Java的foreach,只不过冒号变成了in。

  2. 官方不推荐在同一个标签内,和v-if一起使用。

注意是同一个标签内。可以是上下级标签。

栗子

App.vue

<script setup>
import {ref, reactive} from 'vue';
//响应式基础的str4
let per = reactive([{name: "张三", age: 18}, {name: "李四", age: 18}, {name: "王五", age: 18}]);
</script>

<template>
  <table>
    <tr>
      <th>姓名</th>
      <th>年龄</th>
    </tr>

    <tr v-for="p in per">
      <td v-text="p.name"></td>
      <td v-text="p.age"></td>
    </tr>

  <!--这种写法虽然生效,但是官方不推荐。降低了可读性-->
    <tr v-if="per.length>0" v-for="p in per">
      <td>per数组是空的</td>
    </tr>
    
    <!--使用了上级标签div,推荐,增加了可读性。-->
    <div v-if="per.length>0">
      <tr v-for="p in per">
        <td v-text="p.name"></td>
        <td v-text="p.age"></td>
      </tr>
    </div>
    
  </table>
</template>

<style scoped>
</style>

效果展示
image

posted @ 2024-04-04 17:32  rowbed  阅读(7)  评论(0编辑  收藏  举报