还在手写DOM作?看看Vue如何让你专注业务逻辑

116 阅读4分钟

语义化标签的重要性

在前端开发中,语义化标签是构建数据展示的基础。当需要向老板展示图标和表格数据时,标准的table结构必不可少:

<table>
    <thead>
        <tr>
            <th>表头</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>数据</td>
        </tr>
    </tbody>
</table>

原生JavaScript:DOM编程的复杂性

挂载点概念的初现

在原生JavaScript开发中,挂载点是指页面中用于动态生成内容的目标DOM元素。我们需要先在HTML中预留一个容器作为挂载点,然后通过JavaScript动态生成内容填充到这个位置。

手动操作DOM节点实现动态更新

在原生JavaScript中,我们必须手动操作DOM节点来实现界面的动态更新:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>原生JS</title>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<!-- 挂载点 -->
<div class="container">
    <table id="friends" class="table table-striped">
        <thead>
            <tr>
                <th>姓名</th>
                <th>家乡</th>
            </tr>
        </thead>
        <tbody>
            
        </tbody>
    </table>  
</div>

<script>
// 挂载点 html 由js 动态生成
const oBody = document.querySelector('#friends tbody')
// JSON 数组 
// DOM 编程 动态页面 数据
const friends = [
    {
        "name": "王子",
        "hometown": "九江"
    },
    {
        "name": "公主",
        "hometown": "赣州"
    },
];
// html 字符串 = 数组 类型转换
oBody.innerHTML = friends.map(friend => `
    <tr>
        <td>${friend.name}</td>
        <td>${friend.hometown}</td>
    </tr>
`).join('')
</script>
</body>
</html>

在这个例子中,<tbody>标签就是我们的挂载点,通过注释<!-- 挂载点 -->标明。JavaScript代码中:

  • const oBody = document.querySelector('#friends tbody') 获取挂载点
  • 挂载点的html内容由js动态生成
  • 通过innerHTML将转换后的HTML字符串插入到挂载点中

这种方式需要开发者手动管理挂载点与数据的关系。

为了提升用户体验,避免编写重复的细节代码,我们引入第三方库Bootstrap这个PC端CSS框架来处理业务类样式:

  • .container 容器提供固定宽度布局
  • table 相关样式类美化表格显示效果

这种方式让开发者focus于业务逻辑而非样式细节。

Vue框架:聚焦业务逻辑

从jQuery到Vue的转变

jQuery已经退出历史舞台,Vue成为现代前端开发的主流选择。Vue让开发者聚焦于业务逻辑,将friends数据绑定到tbody挂载点上,远离复杂的API操作,通过声明式方式循环输出tr。关键在于挂载点的概念从手动DOM操作转变为自动数据绑定。

Vue的挂载点机制

Vue框架将挂载点概念进一步发展和简化。在Vue中:

  • <div id="app"> 作为整个应用的挂载点
  • 通过Vue.createApp(App).mount('#app')将Vue应用挂载到指定元素
  • #app区域内的所有内容都支持Vue的响应式功能
  • <tbody>区域通过v-for指令自动处理数据循环,无需手动操作DOM

Vue让挂载点从单纯的DOM容器变成了响应式的数据绑定区域。

Vue实现方式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>聚焦于业务,而不是底层API</title>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <div class="container" id="app">
        <h1>{{title}}</h1>
        <table id="friends" class="table table-striped">
            <thead>
                <tr>
                    <th>姓名</th>
                    <th>家乡</th>
                </tr>
            </thead>
            <tbody>
                <tr v-for="friend in friends">
                    <td>{{ friend.name }}</td>
                    <td>{{ friend.hometown }}</td>
                </tr>
            </tbody>
        </table>  
    </div>
    <script src="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/3.2.31/vue.global.min.js"></script>
    <script>
    // html + css 看到页面  尽快出来,css 放在头部 
    // js 交互的, 可以晚一步 不会去和html + css 争抢时间
    // js 应该放在页面底部引用
    // 做一个App 
    const App = {
        // 申明数据的业务
        data() {
            return {
                title:'ECUT 未来之星',
                friends: [
                    {
                        "name": "王子",
                        "hometown": "九江"
                    },
                    {
                        "name": "公主",
                        "hometown": "赣州"
                    },
                ]
            }
        }
    }
    // 挂载点
    Vue.createApp(App).mount('#app')
    </script>
</body>
</html>

现代前端开发框架:告别刀耕火种

开发理念的根本转变

现代前端开发框架让我们离开原生JS的刀耕火种时代,真正聚焦于业务开发。

从切图崽到App应用开发工程师的转变:

传统前端开发:

  • html + css + 简单的js
  • DOM操作 + 事件处理
  • 关注底层API实现

现代App应用开发工程师:

  • 使用Vue.createApp(App).mount('#app')创建应用并指定挂载点
  • #app挂载点区域支持Vue app功能
  • 挂载点内的数据自动响应变化,摆脱低级DOM API操作

App概念与数据驱动

现代框架引入了App的概念,通过数据驱动的方式处理业务逻辑:

  • Vue App中的data()函数管理业务数据friends
  • 使用v-for指令配合循环输出业务逻辑
  • 实现数据与视图的自动同步

性能优化最佳实践

在资源加载方面,遵循以下原则:

  • html + css 优先显示页面,css放在头部
  • js交互功能可以延后加载,放在页面底部引用
  • 避免js与html + css争抢渲染时间

React:大型应用的解决方案

React来自于Facebook,特别适合大型应用开发。创建React应用的标准方式:

npm init vite

通过vite工具可以快速初始化一个现代化的React项目。

总结

从原生JavaScript到Vue+React的演进过程,体现了前端开发从底层DOM操作向业务逻辑聚焦的根本转变。现代前端框架不仅提升了开发效率,更重要的是改变了开发者的思维模式,让技术真正服务于业务需求。