Vue / React 框架入门完整教程(组件化开发)
前面学了 HTML、CSS、JavaScript,你已经能用原生 JS 操作 DOM 做交互了。但真实项目里,用原生 JS 写复杂页面会非常痛苦——这时就该上框架了。
这一篇讲清楚框架解决什么问题、核心概念是什么,然后分别带你入门 Vue 3 和 React 这两个最流行的框架。
一、为什么需要框架?原生 JS 的痛点
想象你要做一个商品列表页:几十个商品、每个能加购物车、价格实时汇总。用原生 JS 写:
// 伪代码:手动更新页面的繁琐过程商品价格变了→ 找到页面上价格那个元素→ 修改它的文字→ 再找到总价元素→ 重新计算并修改→ 再找到数量元素→ ...数据一变,你就要手动找到 DOM、手动改。数据多了、交互多了,代码就变成”DOM 操作地狱”——又乱又容易出 bug。
框架的核心理念:数据驱动视图。
你只管修改数据,框架自动帮你更新页面:
// 伪代码:框架里你只改数据price = 100; // 改一个变量// 页面上所有用到 price 的地方自动更新三个核心概念:
- 组件化:把页面拆成一个一个”积木”(组件),每个组件管自己的一块,可以复用
- 数据驱动:数据变了,页面自动跟着变,不用手动操作 DOM
- 虚拟 DOM:框架先在”内存里”比较新旧变化,只更新真正变化的部分,性能好
二、Vue 3 入门
怎么开始?两种方式
方式一:CDN(最简单,适合学习)
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>Vue 入门</title> <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script></head><body> <div id="app">{{ message }}</div>
<script> const { createApp, ref } = Vue;
createApp({ setup() { let message = ref("你好,Vue!"); return { message }; } }).mount("#app"); </script></body></html>方式二:Vite 脚手架(正式项目,以后用)
npm create vue@latest创建好项目后进入目录 npm install、npm run dev 就能跑起来。初学阶段先用 CDN 方式练手即可。
模板语法:双大括号插值
<p>{{ message }}</p>{{ }} 里写变量名或表达式,数据变了这里自动更新。
响应式数据:ref
Vue 3 里用 ref 创建”会响应变化”的数据:
<div id="app"> <p>点击次数:{{ count }}</p> <button @click="add">+1</button></div>
<script> const { createApp, ref } = Vue;
createApp({ setup() { let count = ref(0); // 创建响应式数据
function add() { count.value++; // 注意:ref 数据要用 .value 修改 }
return { count, add }; } }).mount("#app");</script>重要: count 本身是 ref 对象,模板里自动解开直接写 count,但 JS 代码里改它必须写 count.value。
常用指令
| 指令 | 作用 | 例子 |
|---|---|---|
v-if | 条件显示 | <p v-if="show">显示了</p> |
v-for | 循环列表 | <li v-for="item in list">{{ item }}</li> |
v-model | 双向绑定输入 | <input v-model="name"> |
v-bind | 绑定属性(可简写 :) | <img :src="url"> |
v-on | 监听事件(可简写 @) | <button @click="fn"> |
v-model 双向绑定(表单神器):
<div id="app"> <input v-model="name" placeholder="输入名字"> <p>你好,{{ name }}</p></div>
<script> const { createApp, ref } = Vue;
createApp({ setup() { let name = ref(""); return { name }; } }).mount("#app");</script>输入框里的字一变,下面的”你好,xxx”立刻跟着变——双向绑定,不用写任何事件监听。
v-for 列表渲染:
<div id="app"> <ul> <li v-for="(item, index) in list" :key="index">{{ index }}. {{ item }}</li> </ul></div>
<script> const { createApp, ref } = Vue;
createApp({ setup() { let list = ref(["苹果", "香蕉", "橘子"]); return { list }; } }).mount("#app");</script>v-if 条件渲染:
<div id="app"> <p v-if="score >= 60">及格了 🎉</p> <p v-else>没及格 😢</p></div>
<script> const { createApp, ref } = Vue; createApp({ setup() { let score = ref(85); return { score }; } }).mount("#app");</script>组件:页面的”积木”
把一段 UI 封装成组件,可以反复用:
<div id="app"> <my-button label="按钮一"></my-button> <my-button label="按钮二"></my-button></div>
<script> const { createApp, ref } = Vue;
// 定义一个组件:一个带文字的按钮 const MyButton = { props: ["label"], // 接收外部传入的属性 template: ` <button style="padding:10px 20px;border-radius:8px;background:#667eea;color:white;border:none;"> {{ label }} </button> ` };
createApp({ components: { MyButton } // 注册组件 }).mount("#app");</script>两个按钮共用一份代码,只是传入的 label 不同。这就是组件复用的意义。
三、React 入门
怎么开始?
方式一:CDN(简单学习用)
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>React 入门</title> <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script> <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script></head><body> <div id="root"></div> <script type="text/babel"> function App() { return <h1>你好,React!</h1>; } ReactDOM.createRoot(document.getElementById("root")).render(<App />); </script></body></html>方式二:Vite 脚手架(正式项目)
npm create vite@latest my-app -- --template reactJSX:在 JS 里写 HTML
React 最特别的地方:组件里直接写类似 HTML 的代码,这叫 JSX。JSX 里用 {} 插入 JS 表达式:
function App() { let name = "小明"; return <h1>你好,{name}!</h1>; // 输出:你好,小明!}状态:useState(React 的”响应式数据”)
Vue 用 ref,React 用 useState:
import { useState } from "react";
function Counter() { const [count, setCount] = useState(0); // 初始值 0
function add() { setCount(count + 1); // 必须用 setCount 修改 }
return ( <div> <p>点击次数:{count}</p> <button onClick={add}>+1</button> </div> );}
export default Counter;注意: React 里修改数据必须调用 setCount(新值),不能直接 count = count + 1。调用了 setCount,React 会自动重新渲染页面。
事件处理:onClick
JSX 里事件用驼峰命名:onClick、onChange、onSubmit。
<button onClick={add}>+1</button><input onChange={e => setText(e.target.value)} />条件渲染
function Score({ score }) { return score >= 60 ? <p>及格了 🎉</p> : <p>没及格 😢</p>;}列表渲染
function FruitList() { const list = ["苹果", "香蕉", "橘子"];
return ( <ul> {list.map((item, index) => ( <li key={index}>{item}</li> // key 是给 React 的标记 ))} </ul> );}组件与 props
function MyButton({ label }) { // props 就是组件的"入参" return <button>{label}</button>;}
function App() { return ( <div> <MyButton label="按钮一" /> <MyButton label="按钮二" /> </div> );}四、Vue vs React:怎么选?
| 维度 | Vue 3 | React |
|---|---|---|
| 上手难度 | 较平缓,中文资料多 | 稍陡,要习惯 JSX 和函数式思维 |
| 模板写法 | HTML 模板 + 指令,接近传统网页 | JSX,代码即 UI |
| 国内生态 | 非常活跃,国内大厂(阿里、字节部分项目)在用 | 全球最大,GitHub 生态最丰富 |
| 学习曲线 | 渐进式,可以一点点引入 | 全量引入,概念相对多 |
我的建议:
- 国内找工作、做中小项目 → Vue(资料多、上手快、国内流行)
- 想进大厂、做大型复杂项目、长期发展 → React(市场占有率全球第一)
但记住: 框架只是工具,核心还是 JavaScript 基础。Vue 和 React 背后的概念(组件、数据驱动、状态)是相通的,精通一个,另一个很快就能上手。二选一深入学习即可,不必两个都精通。
五、总结
这一篇我们理解了:
- 为什么要框架:数据驱动视图,告别手动操作 DOM 的噩梦
- 三大核心概念:组件化、数据驱动、虚拟 DOM
- Vue 3:createApp + ref 响应式、模板指令(v-if/v-for/v-model/@click)、组件复用
- React:函数组件 + useState、JSX、onClick、列表 map 渲染
- 选择建议:国内/入门选 Vue,全球/长期选 React,核心相通
下一篇动手做项目——用前面学的所有知识,做 3 个能真正跑起来的项目。