2.6-2.7、条件&循环渲染

React双重循环渲染棋盘 1.非循环渲染(写死) ​ render() { return ( <div> <div className="board-row"> {this.renderSquare(0)} {this.renderSquare(1)} {this.renderSquare(2)}... 阅读详情

2.6、条件渲染

2.6.1 v-if

指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回true时才被渲染

2.6.2 v-else-if、v-else

顾名思义,v-else-if 提供的是相应于 v-if 的“else if 区块”。它可以连续多次重复使用。

一个使用 v-else-if 的元素必须紧跟在一个 v-if 或一个 v-else-if元素后面。

你也可以使用 v-else 为 v-if 添加一个“else 区块”,当然,v-else元素也是必须紧跟在一个 v-if 或一个 v-else-if元素后面。

需求:根据温度判断天气情况

<!-- v-if v-else-if v-else三者在使用的时候,中间不能断开。 -->
温度:<input type="number" v-model="temprature" ><br /><br />
天气:<span v-if="temprature <= 10">寒冷</span>
<span v-else-if="temprature <= 25">凉爽</span>
<span v-else>炎热</span>
<hr>

2.6.3 <template>与v-if

因为 v-if 是一个指令,他必须依附于某个元素。

但如果我们想要切换不止一个元素呢?

在这种情况下我们可以在一个 <template> 元素上使用 v-if,

这只是一个不可见的包装器元素,最后渲染的结果并不会包含个 <template> 元素。v-else 和 v-else-if 也可以在 <template> 上使用。

<!--3、 template标签/元素只是起到占位的作用,不会真正的出现在页面上,也不会影响页面的结构。 -->
   <template v-if="counter === 10">
      <h2>六下匹,人当送,内。</h2>
      <h3>六下匹,人当送,内。</h3>
      <h4>六下匹,人当送,内。</h4>
    </template>

2.6.4 v-show

另一个可以用来按条件显示一个元素的指令是 v-show。其用法基本一样:

  <div v-show="false">v-show-{{msg}}</div>
  <div v-show="2 === 1">v-show-{{msg}}</div>

不同之处在于 v-show 会在 DOM 渲染中保留该元素;v-show 仅切换了该元素上名为 display 的 CSS 属性。

不能和 v-else 搭配使用。

2.6.5 v-if VS v-show

v-if 是“真实的”按条件渲染,因为它确保了在切换时,条件区块内的事件监听器和子组件都会被销毁与重建

v-if 也是惰性的:如果在初次渲染时条件值为 false,则不会做任何事。条件区块只有当条件首次变为 true 时才被渲染。相比之下,v-show 简单许多,元素无论初始条件如何,始终会被渲染,只有 CSS display属性会被切换。

总的来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要频繁切换,则使用 v-show 较好;如果在运行时绑定条件很少改变,则 v-if 会更合适。

2.7、循环渲染

语法格式:v-for指令。该指令用在被遍历的标签上。

v-for="(element, index) in elements" :key="element.id"

或者

v-for="(element, index) of elements" :key="element.id"

2.7.1 遍历数组、对象、字符串、指定次数

1、遍历对象
  <h2>遍历对象的属性</h2>
  <ul>
    <li v-for="(value, propertyName) of user">{{propertyName}},{{value}}</li>
  </ul>
  <hr />
2、遍历字符串
  <h2>遍历字符串</h2>
  <ul>
    <li v-for="(c,index) of str">{{index}},{{c}}</li>
  </ul>
  <hr />
3、遍历指定次数
  <h2>遍历指定的次数</h2>
    <ul>
      <li v-for="(num,index) of counter">{{index}}, {{num}}</li>
    </ul>
    <hr />
4、遍历数组
 <h2>遍历数组</h2>
      <!-- 静态列表 -->
      <ul>
        <li>张三</li>
        <li>李四</li>
        <li>王五</li>
      </ul>

      <!-- 动态列表 -->
      <ul>
        <!-- 
                1. v-for要写在循环项上。
                2. v-for的语法规则:
                    v-for="(变量名,index) in/of 数组"
                    变量名 代表了 数组中的每一个元素
             -->
        <li v-for="(name,index) of names">{{name}}-{{index}}</li>
      </ul>

      <table>
        <tr>
          <th>序号</th>
          <th>会员名</th>
          <th>年龄</th>
          <th>选择</th>
        </tr>
        <tr v-for="(vip,index) in vips">
          <td>{{index+1}}</td>
          <td>{{vip.name}}</td>
          <td>{{vip.age}}</td>
          <td><input type="checkbox" /></td>
        </tr>
      </table>

2.7.2 虚拟dom和diff算法

虚拟DOM:在内存中的dom对象

diff算法:是一种能够快速的比较出两个事物不同之处的算法

v-for指令所在的标签中,还有一个非常重要的属性::key

如果没有指定 :key 属性,会自动拿index作为key。这个key是这个dom元素的身份证号/唯一标识。

1、 虚拟DOM中key的作用(diff到底是怎么做对比?):

key是虚拟DOM中对象的标识,当数据发生变化时,Vue会根据新数据生成新的虚拟DOM,随后Vue进行新虚拟DOM与旧虚拟DOM的差异比较,比较规则如下

a:旧虚拟DOM中找到与新虚拟DOM中相同的key

若虚拟DOM中内容没变,直接使用之前的真实DOM

若虚拟DOM中内容变了,则生成新的真实DOM,随后替换掉页面中之前的真实DOM

b:旧虚拟DOM中未找到与新虚拟DOM相同的key,则直接创建新的真实DOM,随后渲染到页面

2、 用index作为key可能会引发的问题

a:若对数据进行逆序添加、逆序删除等破坏顺序操作,会产生没有必要的真实DOM更新,当然界面渲染没有问题,就是效率低

b:若结构中还包含输入类的DOM:会产生错误DOM更新,也就是界面有问题

3、开发中如何选择key

a:最好使用每条数据的唯一标识作为key,比如id、手机号、身份证号、学号等唯一值

b:如果不存在对数据的逆序添加,逆序删除等破坏顺序的操作,仅用于渲染列表,使用index作为key是没有问题的

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>虚拟dom与diff算法</title>
    <script src="../js/vue.js"></script>
    <style>
      th,
      td {
        border: 1px solid black;
      }
    </style>
  </head>
  <body>
    <!-- 
    需求1、在数组的最后添加一个数据
    需求2、在数组的前面添加一个数据
    
        v-for指令所在的标签中,还有一个非常重要的属性::key
        如果没有指定 :key 属性,会自动拿index作为key。
        这个key是这个dom元素的身份证号/唯一标识。

        分析以下:采用 index 作为key存在什么问题?
            第一个问题:效率低。
            第二个问题:非常严重了。产生了错乱。尤其是对数组当中的某些元素进行操作。(非末尾元素。)
        怎么解决这个问题?
            建议使用对象的id作为key
        -->
    <div id="app">
      <h1>{{msg}}</h1>
      <table>
        <tr>
          <th>序号</th>
          <th>英雄</th>
          <th>能量值</th>
          <th>选择</th>
        </tr>
        <!-- 这种写法会出现错乱 -->
        <tr v-for="(hero,index) in heros" :key="index">
          <td>{{index+1}}</td>
          <td>{{hero.name}}</td>
          <td>{{hero.power}}</td>
          <td><input type="checkbox" /></td>
        </tr>
      </table>

      <button @click="add">添加英雄麦文</button>
    </div>
    <script>
      const vm = new Vue({
        el: "#app",
        data: {
          msg: "虚拟dom与diff算法",
          heros: [
            { id: "101", name: "艾格文", power: 10000 },
            { id: "102", name: "麦迪文", power: 9000 },
            { id: "103", name: "古尔丹", power: 8000 },
            { id: "104", name: "萨尔", power: 6000 },
          ],
        },
        methods: {
          add() {
            this.heros.unshift({ id: "105", name: "麦文", power: 9100 });
          },
        },
      });
    </script>
  </body>
</html>
Vue——《2.7-8、条件&循环渲染》 本文介绍了 Vue.js 中的条件渲染和循环渲染功能。条件渲染通过 `v-if`、`v-else-if` 和 `v-else` 指令实现内容的条件性显示,`v-show` 则通过切换 CSS 的 `display` 属性来控制元素的显示与隐藏。循环渲染通过 `v-for` 指令实现数组、对象、字符串的遍历渲染,并强调了 `key` 属性在虚拟 DOM 中的重要性。文中还讨论了 `v-if` 和 `v-show` 的性能差异,以及使用 `index` 作为 `key` 的潜在问题。 阅读详情

相关推荐

零基础学simulink仿真建模--基于Simulink进行农业机械用开关磁阻电机的仿真建模

特点结构简单:无电刷、换向器等易损件,维护成本低。坚固耐用:适合恶劣的工作环境,如农业机械作业现场。宽调速范围:通过适当的控制策略可以实现较宽的速度调节范围。挑战非线性特性:SRM的电磁特性和转矩特性具有高度非线性。复杂性:涉及电气、机械动力学以及控制系统的设计与集成。实时性要求:需要快速响应以适应不断变化的操作条件。多变量优化:包括电流控制、速度控制等多个方面需综合考虑。使用Simscape Electrical库来构建一个开关磁阻电机模型。

amy_mhd的博客 909

Vue基础-6(v-for:根据数据生成列表结构、v-model:获取和设置表单元素的值)

Vue基础-6 v-for根据数据生成列表结构 数组经常和v-for结合使用 语法是(item,index) in数据 item 和 index 可以结合其他指令一起使用 数组长度的更新会同步到页面上,是响应式的 例: &lt;div id="app"&gt; &lt;ul&gt; &lt;li v-for="(item,index) in arr" :title="index"&gt; {{item}}||{{index}} &lt;/li&gt; &lt;/ul

旗袍不开、怎么得胜? 770

GEE入门之路(从【初学者】角度,大白话)——附海面风速插值代码

非常初级的GEE入门教程!大白话!有手就行!附海面风速插值代码,克里金插值,时间插值。

weixin_46812066的博客 4086

2.8、条件&循环渲染

你也可以使用 v-else 为 v-if 添加一个“else 区块”,当然,v-else元素也是必须紧跟在一个 v-if 或一个 v-else-if元素后面。key是虚拟DOM中对象的标识,当数据发生变化时,Vue会根据新数据生成新的虚拟DOM,随后Vue进行新虚拟DOM与旧虚拟DOM的差异比较,比较规则如下。顾名思义,v-else-if 提供的是相应于 v-if 的“else if 区块”。一个使用 v-else-if 的元素必须紧跟在一个 v-if 或一个 v-else-if元素后面。

qq_60060362的博客 1405

rk3588 rkaiq_3A_server 无法解析json文件记录

rk3588 rkaiq_3A_server 无法解析json文件记录

neardi_dev的博客 1万+

【CloudCompare教程】017:点云快速全局配准

点云数据的配准分为基于特征(特征点、特征线)的拼接和无特征拼接。特征点匹配的方法和全局ICP的方法。特征点的方法通过全局特征匹配达到全局配准,全局ICP的方法通过对变量空间进行搜索的方法达到全局最优解。

智慧空间实验室 3929

Vue:条件&循环渲染

本文围绕 Vue 的条件与循环渲染展开。条件渲染涵盖 `v-if`、`v-else-if`、`v-else`、`v-show` 等指令的使用及区别,还介绍了 `<template>` 搭配 `v-if` 的用法。循环渲染介绍了 `v-for` 遍历数组、对象等的方式,着重讲解虚拟 DOM 和 diff 算法,强调 `key` 的作用、使用 `index` 作 `key` 的问题及选择 `key` 的方法。

m0_74350516的博客 943

rk3568 点亮双LVDS 屏

承接文章《rk3568点亮LCD(lvds)》中仅仅只能使用亮单LVDS;经过厂商的努力,陆续发布新补丁。目前支持双lvds显示,缺憾是需要自己额外移植相关补丁。受限于通信频率和VOP编码能力,支持最大分辨仍然是1920x1080、60fps。

weixin_35723192的博客 3008

前端应用开发实验:条件渲染和循环渲染

前端应用开发,条件渲染和循环渲染

m0_72471315的博客 1482

HTOL集成电路老化测试学习总结-20250510

电子元器件的可靠性在产品开发中至关重要,尤其是在微电子技术迅速发展的今天。电子元器件的失效率通常遵循“浴盆曲线”,分为早期失效期、可使用期和老化期。为了评估芯片的可靠性,常采用高温操作寿命测试(HTOL),通过高温和高压加速芯片老化,以筛选出早期失效的芯片并评估其长期可靠性。HTOL测试中,芯片在高温下运行并监控其性能变化,通过阿伦尼乌斯公式计算加速因子,预测芯片的失效率和寿命。此外,Burn-in测试用于加速芯片老化,提前发现并剔除不合格产品,而早期失效率测试(ELFR)则用于评估产品初期使用阶段的可靠性

歌颂苦难的行为是无耻的; 2103

十五、SAP-物料需求计划(MRP)

业务逻辑、功能讲解、图文解析、章节总结

m0_72403327的博客 1094

Vue-条件渲染和循环渲染

v-if是通过动态的创建或移除元素来实现元素的显示和隐藏。这样引起的问题是:arr 数组新增一项数据时,会对每一项再做一遍v-if 循环,然后for 循环渲染。渲染过程为:对arr每一项先做map循环判断v-if给出的条件,再做一遍for 循环渲染。1.v-for循环普通数组:v-for=“(em,index) in arr1”2.v-for循环对象数组:v-for=“(em,index) in arr2”3.v-for迭代对象:v-for=“(em, index) in arr3”...

qq_56973906的博客 1248

基于51单片机的电子记分牌的设计

基于51单片机的电子记分牌的设计 电子记分牌基于51单片机的电子记分牌的设计摘要1 引言2 总体设计方案2.1 设计思路(1)设计要求(2)设计思路(3)设计方案2.3综合设计方框图(1)硬件设计框图(2)软件设计3 设计原理分析3.1 电源、复位、下载电路的设计(见图1、2、3)3.2 时钟电路的设计3.3 矩阵键盘电路的设计3.4 数码管显示电路设计4程序代码 摘要 本设计为电子记分牌设计,是以STC89C52芯片为核心,辅以必要电路设计进行的。用4位LED七段数码管显示比赛两方的分数(每方分数用2位

行走的皮卡丘 2037

【微信小程序】条件渲染 列表渲染 原来这样用?

目录WXML 模板语法 - 条件渲染🍊1. wx:if🍋2. 结合 使用 wx:if🍉3. hidden🍓4. wx:if 与 hidden 的对比WXML 模板语法 - 列表渲染🥭1. wx:for🍍2. 手动指定索引和当前项的变量名🥝3. wx:key 的使用 也可以用 wx:elif 和 wx:else 来添加 else 判断: js: 因为type的值为1,所以: 例如:WXML: JS和上面的一样效果: hidden 中 false 表...

Javascript_tsj的博客 2291

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【HarmonyOS (ArkTS) 基础渲染指南第7天】:条件渲染与循环渲染

摘要:ArkTS中的条件渲染和循环渲染是实现动态UI的核心技术。条件渲染通过if/else语句根据状态变量动态显示不同组件,适合处理登录状态等场景;循环渲染使用ForEach将数组数据映射为组件列表,适用于数据展示。二者都需遵循特定语法规则,条件渲染需使用@State驱动视图更新,循环渲染应提供唯一键值优化性能。实际开发中可嵌套使用这两种技术,并注意状态管理和性能优化,以构建高效灵活的界面。

2501_93461085的博客 353

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

for循环的优点_从零单排vue第三课--Vue.js的条件渲染和循环渲染

前情回顾上一节我们讲解了vue的一些设计思想,记住最重要的两点:双向数据绑定以及组件化思维。现在不太理解没关系,在后面的课程中,我们会慢慢发现这些重要思想的优点。条件渲染(v-if,v-show)在vue里,控制切换一个元素是否显示非常简单。如下代码:&lt;!DOCTYPE html&gt; 2运行结果: 浏览器中正常显示hello world。但是如果在控制台输入app.show = fal...

weixin_39722070的博客 212

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

vue之条件与循环渲染(二)

v-if 和 v-elsev-showv-if 和 v-show 比较v-for 将数组数据渲染成元素v-for 将对象数据渲染成元素key 属性数组更新检测对象更新的注意事项本小节涉及的知识点比较多,但是还是比较容易理解,并且这些指令方法基本都会搭配使用,重点需要注意数组和对象操作中一些小知识,有些情况下用 Vue.set 来操作数组或者对象,才能建立响应式,才能触发视图更新。

weixin_52129860的博客 898

运算 数据绑定 循环 black标签 条件渲染

微信小程序 运算 数据绑定 循环 black标签 条件渲染 //Page Object Page({ data: { msg: "hello mina", num: 10000, isGirl: false, person: { age: 74, height: 145, weight: 200, name: "富婆" }, isChecked:false, list:[ {

Vue1024的博客 425

vue: 条件渲染v-if和循环v-for

知识点: v-if、v-for、在vue中重写的数组的方法、识别不同的dom节点 v-if 条件渲染有三个: v-if v-else-if v-else,使用方法跟js相似 他们是把多余的dom节点去除(不是none) &lt;div id="app"&gt; &lt;p v-if='i...

u012872771的博客 2330

微信小程序 之 条件渲染、列表渲染

条件渲染 wx:if 在框架中,使用 wx:if="" 来判断是否需要渲染该代码块: &lt;view wx:if="{{condition}}"&gt; True &lt;/view&gt; 也可以用 wx:elif 和 wx:else 来添加一个 else 块: &lt;view wx:if="{{length &gt; 5}}"&gt; 1 &lt;/view&gt; &lt;view wx:elif="{{length &gt; 2}}"&gt; 2 &lt;/view&gt; &lt;view

此心安处 2467

ArkTS 条件渲染与循环渲染:从原理到性能优化的完全指南

在 ArkTS 声明式 UI 开发范式中,build()函数负责描述组件树的结构,但静态的组件描述无法满足动态业务需求。当应用状态随用户交互、网络请求或系统事件发生变化时,UI 必须能够"智能"地响应这些变化——这正是渲染控制的核心使命。条件渲染if/else):根据布尔条件决定组件的创建与销毁;循环渲染ForEach):基于数组数据源批量生成同质组件;数据懒加载):针对大数据量场景的按需渲染优化。据统计,在典型的 HarmonyOS 应用中,超过 90% 的页面。

从事移动开发八年,csdn博客专家,阿里云特邀专家,华为云云享专家,高级网络信息安全工程师,大数据工程师(高级),python技术开发(高级),HarmonyOS 应用开发者高级认证,现在某学校任教。 1万+

html可以用vue渲染吗,vue条件渲染和列表渲染

在vue中我们可以使用v-if语句进行条件渲染,用v-for指令根据一组数组的选项列表进行渲染。本文就来为大家详细介绍一下vue中的条件渲染和列表渲染。一、条件渲染1、v-if语句hahahah如果seen为true,则显示,如果seen为false,则不显示2、v-if和v-else语句123456如果seen为true,则显示123,如果seen不为真,则显示4563、v-if、v-else-...

weixin_33929779的博客 1177

Vue——day07之条件渲染、列表渲染以及监测数据

Vue-条件渲染以及列表渲染,v-for中的细节,v-for中的key 的作用与原理

WenJGo的博客 1498

微信小程序 条件渲染 wx:if和列表渲染 wx:for

wx:if在框架中,我们用wx:if=&#34;{{condition}}&#34;来判断是否需要渲染该代码块:&lt;view wx:if=&#34;{{condition}}&#34...

陌然的博客 2764

Vue笔记——7.条件渲染

小妍Vue笔记——目录 一、前言 条件渲染和列表渲染其实就是使用vue的v-if和v-for两个指令来控制是否渲染和循环渲染的逻辑。 二、条件渲染 条件渲染使用vue的逻辑绑定指令来实现分支结构,来决定渲染哪一个dom或哪一个组件。 &lt;div id = "app"&gt; &lt;div v-if = "status1"&gt;1&lt;/div&gt; &lt;div v-else-if = "status2"&gt;2&lt;/div&gt; &lt;div v-else = "sta

qq_45956680的博客 338

微信小程序_wx:for 循环渲染&结合block包装

微信小程序_wx:for 循环渲染&amp;block包装 之前学习过 vue 里面的v-for ,这里的 wx:for 有异曲同工之妙。作用都是:循环渲染,个人认为这个功能和组件配合起来简直好用的要了命。 wx:for 的使用 渲染单纯数组元素 &lt;view wx:for="arr"&gt; {{item}} &lt;/view&gt; //item 表示元素 data: { arr:["哈哈" , "呵呵" , "咯咯"] }, 渲染对象数组元素 &lt;view

gzmhxsn的博客 1910
上一篇: 2.5、Vue2侦听属性
@Cedric
博客等级 码龄5年 263粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值