【Vue】06 Vue技术——Vue 中 `el` 与 `data` 的两种写法总结

文章目录

    • 前言
    • [一、`el` 的两种写法](#一、el 的两种写法)
      • [1. 在创建实例时直接配置](#1. 在创建实例时直接配置)
      • [2. 先创建实例,再手动挂载](#2. 先创建实例,再手动挂载)
    • [二、`data` 的两种写法](#二、data 的两种写法)
      • [1. 对象式(适用于根实例)](#1. 对象式(适用于根实例))
      • [2. 函数式(推荐,尤其在组件中必须使用)](#2. 函数式(推荐,尤其在组件中必须使用))
    • [三、关键原则:不要在 Vue 管理的函数中使用箭头函数](#三、关键原则:不要在 Vue 管理的函数中使用箭头函数)
    • 四、完整代码
    • 五、总结

前言

在使用 Vue.js 进行开发时,正确理解并掌握 eldata 的配置方式对构建灵活、可维护的应用至关重要。本文将围绕这两个核心选项的两种常见写法进行系统性总结,并强调一个关键的编程原则。


一、el 的两种写法

el 用于指定 Vue 实例所要控制的 DOM 元素(即挂载点)。它有两种使用方式:

1. 在创建实例时直接配置

js 复制代码
new Vue({
    el: '#root',
    data: {
        name: '上高山'
    }
});

这是最常见、最直观的方式,在实例化时就完成挂载。

2. 先创建实例,再手动挂载

js 复制代码
const vm = new Vue({
    data: {
        name: '上高山'
    }
});
// 稍后通过 $mount 方法挂载
vm.$mount('#root');

这种方式提供了更大的灵活性,例如可以延迟挂载、条件挂载,或在异步操作完成后才将 Vue 实例绑定到 DOM。

注意$mount() 是 Vue 提供的用于手动挂载实例的方法,其参数为选择器字符串(如 '#root')或 DOM 元素。


二、data 的两种写法

data 用于定义 Vue 实例的响应式数据。根据使用场景不同,也有两种形式:

1. 对象式(适用于根实例)

js 复制代码
data: {
    name: '上高山'
}

在创建根 Vue 实例(即非组件)时,可以直接使用对象作为 data

2. 函数式(推荐,尤其在组件中必须使用)

js 复制代码
data() {
    return {
        name: '上高山'
    };
}
// 或
data: function() {
    return {
        name: '上高山'
    };
}

函数式写法确保每个组件实例拥有独立的数据副本,避免多个实例间数据相互污染。

重要提示

当你将来开发 Vue 组件(Component)时,data 必须是一个返回对象的函数。如果使用对象形式,Vue 会抛出警告甚至报错,因为对象是引用类型,多个组件实例会共享同一份数据,破坏组件的独立性。


三、关键原则:不要在 Vue 管理的函数中使用箭头函数

Vue 内部大量依赖 this 指向当前 Vue 实例。而箭头函数没有自己的 this,它会继承外层作用域的 this,从而导致 this 不再指向 Vue 实例。

❌ 错误示例:

js 复制代码
data: () => {
    console.log(this); // this 不是 Vue 实例!可能是 window 或 undefined
    return { name: '上高山' };
}

✅ 正确做法:

js 复制代码
data() {
    console.log(this); // this 是当前 Vue 实例
    return { name: '上高山' };
}

这一原则不仅适用于 data,也适用于 methodscomputed、生命周期钩子等所有由 Vue 管理的函数。


四、完整代码

css 复制代码
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title>el与data的两种写法</title>
    <!-- 引入Vue -->
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>

    <!--
    data与el的2种写法
    1.el有2种写法
        (1).new Vue时候配置el属性。
        (2).先创建Vue实例,随后再通过vm.$mount('#root')指定el的值。

    2.data有2种写法
        (1).对象式
        (2).函数式
        如何选择:目前哪种写法都可以,以后学习到组件时,data必须使用函数式,否则会报错。

    3.一个重要的原则:
        由Vue管理的函数,一定不要写箭头函数,一旦写了箭头函数,this就不再是Vue实例了。
    -->

    <!-- 准备好一个容器-->
    <div id="root">
        <h1>你好,{{name}}</h1>
    </div>
    
    <script type="text/javascript">
        // 关闭生产环境提示
        Vue.config.productionTip = false // 阻止 vue 在启动时生成生产提示。

        // el的两种写法
        // const v = new Vue({
        //     //el:'#root', // 第一种写法
        //     data:{
        //         name:'上高山'
        //     }
        // })
        // console.log(v)
        // //v.$mount('#root') // 第二种写法
        // setTimeout(()=>{
        //     v.$mount('#root')
        // },3000);

        // data的两种写法
        new Vue({
            el:'#root',
            // data的第一种写法:对象式
            // data:{
            //     name:'上高山'
            // }

            // data的第二种写法:函数式
            data:function(){
                console.log('@@@', this) // 此处的this是vue实例对象
                return{
                    name:'上高山'
                }
            }
        })
    </script>
</body>
</html>

五、总结

配置项 写法一 写法二 使用建议
el 实例化时直接指定 el: '#root' 先创建实例,再调用 vm.$mount('#root') 根据是否需要延迟/动态挂载选择
data 对象 { name: '...' } 函数 () => ({ name: '...' }) 始终优先使用函数式,为组件开发做准备

最佳实践 :即使当前只是编写根实例,也建议统一使用 data() 函数写法,并避免在 Vue 管理的函数中使用箭头函数。这不仅能避免未来迁移至组件架构时的重构成本,也能养成良好的编码习惯。

通过掌握这些基础但关键的细节,你将能更稳健地使用 Vue 构建应用,为后续学习组件化开发打下坚实基础。

相关推荐
持续升级打怪中11 小时前
ES6 Promise 完全指南:从入门到精通
前端·javascript·es6
AC赳赳老秦11 小时前
前端可视化组件开发:DeepSeek辅助Vue/React图表组件编写实战
前端·vue.js·人工智能·react.js·信息可视化·数据分析·deepseek
wulijuan88866611 小时前
Web Worker
前端·javascript
老朋友此林11 小时前
React Hook原理速通笔记1(useEffect 原理、使用踩坑、渲染周期、依赖项)
javascript·笔记·react.js
克里斯蒂亚诺更新11 小时前
vue3使用pinia替代vuex举例
前端·javascript·vue.js
冰暮流星11 小时前
javascript赋值运算符
开发语言·javascript·ecmascript
小夏卷编程11 小时前
vue2 实现数字滚动特效
前端·vue.js
西凉的悲伤12 小时前
html制作太阳系行星运行轨道演示动画
前端·javascript·html·行星运行轨道演示动画
低保和光头哪个先来12 小时前
源码篇 实例方法
前端·javascript·vue.js
你真的可爱呀12 小时前
自定义颜色选择功能
开发语言·前端·javascript