← 返回目录 | 下一课:JSX语法详解 →

第1课: React基础入门

组件化思想与虚拟DOM原理详解

🎯 学习目标

📋 前置知识要求

1. React是什么?

React定义:React是一个用于构建用户界面的JavaScript库,由Facebook开发并开源。它采用组件化、声明式的开发模式,让构建交互式UI变得简单高效。

React的核心特点

2. 组件化思想

组件化概念:组件是React应用的基本构建块。每个组件都是一个独立的、可复用的代码单元,负责渲染UI的一部分。

传统开发 vs 组件化开发

传统开发方式

// 传统方式:HTML、CSS、JS分离
<div id="app">
    <header>...</header>
    <main>...</main>
    <footer>...</footer>
</div>

// 需要分别维护三个文件

React组件化方式

// React方式:组件封装
function App() {
    return (
        <div>
            <Header />
            <MainContent />
            <Footer />
        </div>
    );
}

// 每个组件都是独立的单元

组件的好处

3. 虚拟DOM原理

虚拟DOM定义:虚拟DOM是React在内存中维护的一个轻量级的JavaScript对象,它是对真实DOM的抽象表示。

虚拟DOM的工作流程

虚拟DOM更新流程

组件状态变化 → 重新渲染虚拟DOM → Diff算法比较差异 → 批量更新真实DOM

状态变化
虚拟DOM
Diff算法
真实DOM

为什么需要虚拟DOM?

4. 第一个React组件

函数组件示例

// 最简单的函数组件
function Welcome() {
    return <h1>Hello, React!</h1>;
}

// 使用组件
function App() {
    return (
        <div>
            <Welcome />
            <p>这是我的第一个React应用</p>
        </div>
    );
}

组件命名规范:React组件名称必须以大写字母开头,这是为了区分普通HTML标签和React组件。

类组件示例(了解即可)

// 类组件(传统方式,现在推荐使用函数组件)
class Welcome extends React.Component {
    render() {
        return <h1>Hello, React!</h1>;
    }
}

5. 声明式编程 vs 命令式编程

命令式编程(传统方式)

// 描述"如何做"
const button = document.getElementById('btn');
button.addEventListener('click', () => {
    const text = document.getElementById('text');
    text.style.color = 'red';
    text.textContent = '按钮被点击了!';
});

声明式编程(React方式)

// 描述"应该是什么样子"
function Button() {
    const [clicked, setClicked] = useState(false);
    
    return (
        <div>
            <button onClick={() => setClicked(true)}>
                点击我
            </button>
            <p style={{color: clicked ? 'red' : 'black'}}>
                {clicked ? '按钮被点击了!' : '等待点击...'}
            </p>
        </div>
    );
}

6. React生态系统

React生态:React本身只是一个视图库,但拥有丰富的生态系统,包括路由、状态管理、构建工具等。

核心生态工具

💡 动手练习

任务:创建一个简单的个人名片组件

要求:

// 参考答案
function ProfileCard() {
    return (
        <div style={{border: '1px solid #ccc', padding: '20px', margin: '10px'}}>
            <h2>张三</h2>
            <p><strong>职位:</strong>前端工程师</p>
            <p>热爱编程,专注于React技术栈开发</p>
        </div>
    );
}

function App() {
    return <ProfileCard />;
}

📝 关键概念总结