• vif & vfor 理解


    先上代码,通过 script 标签方式引入 vue.js(2.x版本)

    <!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>v-if&v-for</title>
      </head>
      <body>
        <div id="demo">
          <h4>v-if 与 v-for 的优先级问题</h4>
          <p v-if="isShow" v-for="(item,i) in children">{{ item.title }}</p>
        </div>
        <!-- <script src="vue.js"></script> -->
        <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
        <script>
          const app = new Vue({
            el: '#demo',
            data() {
              return {
                name: '彭',
                children: [{ title: '标题一' }, { title: '标题一' }],
                isShow: true
              };
            }
          });
          console.log(app.$options.render);
        </script>
      </body>
    </html>

    在打印出的 app.$options.render 中会发现,v-for 优先级高于 v-if

    (function anonymous() {
        with (this) {
            return _c('div', {
                attrs: {
                    "id": "demo"
                }
            }, [_c('h4', [_v("v-if 与 v-for 的优先级问题")]), _v(" "), _l((children), function(item, i) {
                return (isShow) ? _c('p', [_v(_s(item.title))]) : _e()
            })], 2)
        }
    }
    )

     那 vue3.x版本呢?

    个人只是通过 npm run build 打包后,看js文件验证的:v-if 的优先级高于 v-for !

    const s = d([ // 自己定义的数组
            { title: "\u6807\u9898\u4E00" },
            { title: "\u6807\u9898\u4E8C" },
          ]);
          let v = d(!0); // 自己定义的布尔值
          return (y, m) => (
            c(),
            p(
              f,
              null,
              [
                a("h1", null, u(r.msg), 1),
                a(
                  "h2",
                  { onClick: m[0] || (m[0] = (...g) => i(l) && i(l)(...g)) },
                  u(t.value),
                  1
                ),
                a("h4", H, u(n.value), 1),
                a("h4", null, u(i(o).gander), 1),
                i(v) // 判断定义的布尔值
                  ? (c(!0),
                    p(
                      f,
                      { key: 0 },
                      x(s.value, (g, W) => (c(), p("p", null, u(g.title), 1))), // 进行 for 循环
                      256
                    ))
                  : A("", !0),
              ],
              64
            )
          );

    总结:

    vue2.x 版本:v-for 优先级高于 v-if

    vue3.x 版本:v-if 优先级高于 v-for

    总的来说,v-if 优先级高于 v-for 可以减少性能的浪费;

    如果在 vue2.x 版本,v-if & v-for 必须写在同一级怎么办?

    答:在外层嵌套 template,在这一层进行 v-if 判断,然后在内部进行 v-for 循环

    template的作用是模板占位符,可帮助我们包裹元素,但在循环过程当中,template不会被渲染到页面上

    https://www.cnblogs.com/tu-0718/p/11177236.html

  • 相关阅读:
    spring开发_Spring_DataSource
    spring开发_Annotation_注解
    java中子类的继承性
    spring开发_BeanFactoryPostProcessor_容器后处理器
    Caliburn笔记Presenter的管理(wpf框架)
    Caliburn笔记基本Command(wpf框架)
    Caliburn笔记Presenter与View(视图策略)(wpf框架)
    Caliburn笔记Action的创建(wpf框架)
    Caliburn笔记元数据(Metadata)管理(wpf框架)
    Caliburn笔记Action简写(wpf框架)
  • 原文地址:https://www.cnblogs.com/pengxiangchong/p/16026733.html
Copyright © 2020-2023  润新知