zoukankan      html  css  js  c++  java
  • 672 vue列表渲染:v-for支持的类型,template元素,数组更新检测,v-for中的key,VNode,diff算法,源码

    列表渲染


    v-for基本使用


    v-for支持的类型


    01_v-for的基本使用.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <div id="app"></div>
    
      <template id="my-app">
        <h2>电影列表</h2>
        <ul>
          <!-- 遍历数组 -->
          <li v-for="(movie, index) in movies">{{index+1}}.{{movie}}</li>
        </ul>
        <h2>个人信息</h2>
        <ul>
          <!-- 遍历对象 -->
          <li v-for="(value, key, index) in info">{{value}}-{{key}}-{{index}}</li>
        </ul>
        <h2>遍历数字</h2>
        <ul>
          <li v-for="(num, index) in 10">{{num}}-{{index}}</li>
        </ul>
      </template>
    
      <script src="../js/vue.js"></script>
      <script>
        const App = {
          template: '#my-app',
          data() {
            return {
              movies: [
                "星际穿越",
                "盗梦空间",
                "大话西游",
                "教父",
                "少年派"
              ],
              info: {
                name: "why",
                age: 18,
                height: 1.88
              }
            }
          }
        }
    
        Vue.createApp(App).mount('#app');
      </script>
    </body>
    </html>
    

    template元素


    02_v-for和template.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <div id="app"></div>
    
      <template id="my-app">
        <ul>
          <template v-for="(value, key) in info">
            <li>{{key}}</li>
            <li>{{value}}</li>
            <li class="divider"></li>
          </template>
        </ul>
      </template>
    
      <script src="../js/vue.js"></script>
      <script>
        const App = {
          template: '#my-app',
          data() {
            return {
              info: {
                name: "why",
                age: 18,
                height: 1.88
              }
            }
          }
        }
    
        Vue.createApp(App).mount('#app');
      </script>
    </body>
    </html>
    

    数组更新检测


    03_数组的修改方法.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <div id="app"></div>
    
      <template id="my-app">
        <h2>电影列表</h2>
        <ul>
          <li v-for="(movie, index) in movies">{{index+1}}.{{movie}}</li>
        </ul>
        <input type="text" v-model="newMovie">
        <button @click="addMovie">添加电影</button>
      </template>
    
      <script src="../js/vue.js"></script>
      <script>
        const App = {
          template: '#my-app',
          data() {
            return {
              newMovie: "",
              movies: [
                "星际穿越",
                "盗梦空间",
                "大话西游",
                "教父",
                "少年派"
              ]
            }
          },
          methods: {
            addMovie() {
              this.movies.push(this.newMovie);
              this.newMovie = "";
    
              // this.movies = this.movies.filter(item => item.length > 2);
            }
          }
        }
    
        Vue.createApp(App).mount('#app');
      </script>
    </body>
    </html>
    

    v-for中的key是什么作用?


    认识VNode


    虚拟DOM


    插入F的案例


    Vue源码对于key的判断


    没有key的操作(源码)


    没有key的过程如下


    有key执行操作(源码)


    有key的diff算法如下(一)


    有key的diff算法如下(二)


    有key的diff算法如下(三)


    04_key案例-插入f元素.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <div id="app"></div>
    
      <template id="my-app">
        <ul>
          <li v-for="item in letters" :key="item">{{item}}</li>
        </ul>
        <button @click="insertF">插入F元素</button>
      </template>
    
      <script src="../js/vue.js"></script>
      <script>
        const App = {
          template: '#my-app',
          data() {
            return {
              letters: ['a', 'b', 'c', 'd']
            }
          },
          methods: {
            insertF() {
              // D9A9EF  90D0E8  90D0EA
              this.letters.splice(2, 0, 'f')
            }
          }
        }
    
        Vue.createApp(App).mount('#app');
      </script>
    </body>
    </html>
    

  • 相关阅读:
    C语言文件
    java课程设计-彩票购买抽奖程序
    面向对象设计大作业——图书馆
    有理数类设计
    图总结
    编译器、编辑器、文件、IDE等常见概念辨析
    树、二叉树、查找算法总结
    互评:数据结构、算法及线性表总结
    c语言文件
    第二次博客园作业
  • 原文地址:https://www.cnblogs.com/jianjie/p/14784257.html
Copyright © 2011-2022 走看看