美文网首页
Vue组件data为什么必须是个函数而Vue的根实例则没有此限制

Vue组件data为什么必须是个函数而Vue的根实例则没有此限制

作者: JJWANNA1 | 来源:发表于2020-04-12 16:50 被阅读0次

    源码中找答案:src\core\instance\state.js - initData()
    函数每次执行都会返回全新data对象实例

    测试代码如下

    <!DOCTYPE html>
    <html>
    <head> 
      <title>Vue事件处理</title>
    </head>
    <body>
        <div id="demo">
            <h1>vue组件data为什么必须是个函数? </h1> 
            <comp></comp>
            <comp></comp>
      </div>
      <script src="../../dist/vue.js"></script>
     <script>
        Vue.component('comp', {
              template:'<div @click="counter++">{{counter}}</div>', 
              data: {counter: 0}
        })
      // 创建实例
      const app = new Vue({
                el: '#demo',
        });
    </script>
    </body>
    </html>
    

    程序中组件中data设置了一个对象的形式,运行会报错甚至无法通过vue检测

    结论

    1.Vue组件可能存在多个实例,如果使用对象形式定义data,则会导致它们共用一个data对象,那么状态变更将会影响所有组件实例,这是不合理的;
    2.采用函数形式定义,在initData时会将其作为工厂函数返回全新data对象,有效规避多实例之间状态污染问题。
    3.而在Vue根实例创建过程中则不存在该限制,也是因为根实例只能有一个,不需要担心这种情况。

    相关文章

      网友评论

          本文标题:Vue组件data为什么必须是个函数而Vue的根实例则没有此限制

          本文链接:https://www.haomeiwen.com/subject/wlkbmhtx.html