一、原生 JS:数据和视图「分离」,必须手动同步
原生 JS 里,数据是数据,视图是视图,两者完全没关系:
- 你有一个变量
count = 100(数据) - 页面上有一个
<span>显示 100(视图) - 当你点击按钮修改
count时,必须手动写代码把新的count赋值给<span>的内容,否则页面永远不会变。
计数器:
// 原生JS必须手动做两件事:改数据 + 改视图
addBtn.addEventListener('click', function() {
count++; // 1. 改数据
countSpan.textContent = count; // 2. 手动把数据同步到视图(缺一不可!)
});
痛点:项目越大,DOM 操作越多,很容易漏写、写错,导致数据和视图不一致,维护成本爆炸。
二、Vue:数据和视图「双向绑定」,自动同步
Vue 做了一件事:把数据和视图「连接」起来,建立了响应式关系:
- 你把
count写在data里,Vue 会自动给它加上「响应式监听」 - 页面上的
{``{count}}会自动「订阅」这个数据的变化 - 当你修改
count时,Vue 会自动检测到变化,立刻更新对应的视图,你完全不用写任何 DOM 操作代码。
例子:
<!-- 视图:{{count}} 自动绑定data里的count -->
<span>{{count}}</span>
<button @click="count++">+</button>
data: {
count: 100 // 数据:Vue自动监听它的变化
}
优势:关心「改数据」,Vue 自动帮你「更视图」,彻底解放了 DOM 操作,代码量少、逻辑清晰、不会出错。
三、一句话总结(背下来就是核心)
- 原生 JS:数据改了,视图不会自己变,必须手动写代码把数据「写」进视图里。
- Vue:数据改了,视图自动跟着变,因为 Vue 在数据和视图之间搭了一座「自动同步的桥」。
补充:Vue 的「双向绑定」到底是什么?
理解成:
data里的数据是「源」,页面上的视图是「镜像」- 源变了,镜像自动变(数据驱动视图)
- (如果是表单输入)镜像变了,源也自动变(视图驱动数据,比如
v-model)
这就是 Vue 能成为前端主流框架的核心原因之一,彻底解决了原生 JS 手动操作 DOM 的痛点。