🚀 现代前端框架学习

前端框架是现代Web开发的核心工具。通过学习React和Vue,你将掌握组件化开发、 状态管理、路由系统等现代前端开发的核心概念,为构建复杂的单页面应用做好准备。

React

Facebook开发 JSX语法 虚拟DOM 单向数据流

由Facebook开发的用户界面库,以组件化和函数式编程思想著称

Vue.js

尤雨溪开发 模板语法 渐进式 双向绑定

渐进式JavaScript框架,易学易用,适合快速开发和原型设计

📚 推荐学习路径

1

选择框架

根据项目需求和个人喜好选择React或Vue作为主要学习框架

2

基础概念

学习组件、状态、属性、生命周期等核心概念

3

开发工具

掌握脚手架工具、开发者工具、构建配置等

4

实战项目

通过实际项目加深理解,学习最佳实践

React 基础学习

学习React的核心概念和开发模式

JSX 语法

JSX是JavaScript的语法扩展,让你可以在JavaScript中编写类似HTML的代码

JSX
// JSX语法示例
function Welcome(props) {
  // 这是一个React函数组件
  // props是组件接收的属性(类似HTML元素的attributes)
  return (
    // JSX返回值必须用括号包裹,确保正确解析
    <div className="welcome">
      {/* 注意:JSX中使用className而不是class */}
      <h1>Hello, {props.name}!</h1>
      {/* 大括号{}内可以写JavaScript表达式 */}
      <p>Welcome to React</p>
    </div>
  );
}

// 使用组件就像使用HTML标签一样简单
<Welcome name="张三" />
{/* name="张三"是传递给组件的props */}
JSX必须有一个根元素,或使用React.Fragment包裹多个元素

组件化开发

React应用由组件构成,组件是可复用的UI单元,具有自己的状态和逻辑

React Component
// 函数组件(推荐的现代写法)
function Button({ text, onClick, type = 'primary' }) {
  // 解构props:从传入的属性中提取需要的值
  // type = 'primary':设置默认值
  return (
    <button 
      className={`btn btn-${type}`}
      {/* 模板字符串:动态生成CSS类名 */}
      onClick={onClick}
      {/* 事件处理:接收父组件传递的点击函数 */}
    >
      {text}
      {/* 显示按钮文字 */}
    </button>
  );
}

// 类组件(传统写法,了解即可)
class Counter extends React.Component {
  constructor(props) {
    super(props);
    // 初始化组件状态
    this.state = { count: 0 };
  }
  
  render() {
    // render方法返回组件的UI结构
    return (
      <div>
        <p>Count: {this.state.count}</p>
        {/* 显示当前计数值 */}
        <Button 
          text="增加" 
          onClick={() => this.setState({count: this.state.count + 1})}
          {/* 使用自定义Button组件,体现组件复用 */}
        />
      </div>
    );
  }
}

React Hooks

Hooks让你在函数组件中使用state和其他React特性,是现代React开发的核心

React Hooks
import React, { useState, useEffect } from 'react';

function UserProfile({ userId }) {
  // useState Hook - 管理状态
  const [user, setUser] = useState(null);
  const [loading, setLoading] = useState(true);
  
  // useEffect Hook - 处理副作用
  useEffect(() => {
    async function fetchUser() {
      setLoading(true);
      try {
        const response = await fetch(`/api/users/${userId}`);
        const userData = await response.json();
        setUser(userData);
      } catch (error) {
        console.error('获取用户信息失败:', error);
      } finally {
        setLoading(false);
      }
    }
    
    fetchUser();
  }, [userId]); // 依赖数组
  
  if (loading) return <div>加载中...</div>;
  if (!user) return <div>用户不存在</div>;
  
  return (
    <div className="user-profile">
      <h2>{user.name}</h2>
      <p>{user.email}</p>
    </div>
  );
}

状态管理

React中的状态管理包括本地状态(useState)和全局状态(Context API、Redux等)

Context API
// 创建Context
const ThemeContext = React.createContext();

// Provider组件
function ThemeProvider({ children }) {
  const [theme, setTheme] = useState('light');
  
  return (
    <ThemeContext.Provider value={{ theme, setTheme }}>
      {children}
    </ThemeContext.Provider>
  );
}

// 使用Context
function ThemedButton() {
  const { theme, setTheme } = useContext(ThemeContext);
  
  return (
    <button 
      className={`btn btn-${theme}`}
      onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}
    >
      切换到{theme === 'light' ? '深色' : '浅色'}主题
    </button>
  );
}

React 交互演示

下面是一个简单的React计数器演示,展示了状态管理和事件处理:

Vue.js 基础学习

学习Vue.js的核心概念和开发模式

模板语法

Vue使用基于HTML的模板语法,允许你声明式地将DOM绑定到底层Vue实例的数据

Vue Template
<!-- Vue模板语法 -->
<template>
  <div class="user-card">
    <!-- 文本插值 -->
    <h2>{{ user.name }}</h2>
    
    <!-- 属性绑定 -->
    <img :src="user.avatar" :alt="user.name">
    
    <!-- 条件渲染 -->
    <p v-if="user.isOnline" class="online">在线</p>
    <p v-else class="offline">离线</p>
    
    <!-- 列表渲染 -->
    <ul>
      <li v-for="skill in user.skills" :key="skill">
        {{ skill }}
      </li>
    </ul>
    
    <!-- 事件处理 -->
    <button @click="toggleOnline">
      {{ user.isOnline ? '设为离线' : '设为在线' }}
    </button>
  </div>
</template>

响应式数据

Vue的响应式系统能够自动追踪数据的变化,当数据改变时自动更新DOM

Vue Composition API
<script setup>
import { ref, reactive, computed, watch } from 'vue'

// 响应式引用
const count = ref(0)
const message = ref('Hello Vue!')

// 响应式对象
const user = reactive({
  name: '张三',
  age: 25,
  email: 'zhangsan@example.com'
})

// 计算属性
const doubleCount = computed(() => count.value * 2)
const userInfo = computed(() => `${user.name} (${user.age}岁)`)

// 侦听器
watch(count, (newCount, oldCount) => {
  console.log(`计数从 ${oldCount} 变为 ${newCount}`)
})

// 方法
function increment() {
  count.value++
}

function updateUser() {
  user.age++
}
</script>

组件通信

Vue组件间可以通过props向下传递数据,通过events向上传递数据

Vue Component Communication
<!-- 父组件 -->
<template>
  <div>
    <h1>任务列表</h1>
    <TaskInput @add-task="addTask" />
    <TaskList 
      :tasks="tasks" 
      @toggle-task="toggleTask"
      @remove-task="removeTask"
    />
  </div>
</template>

<script setup>
import { ref } from 'vue'
import TaskInput from './TaskInput.vue'
import TaskList from './TaskList.vue'

const tasks = ref([])

function addTask(taskText) {
  tasks.value.push({
    id: Date.now(),
    text: taskText,
    completed: false
  })
}

function toggleTask(taskId) {
  const task = tasks.value.find(t => t.id === taskId)
  if (task) task.completed = !task.completed
}

function removeTask(taskId) {
  const index = tasks.value.findIndex(t => t.id === taskId)
  if (index > -1) tasks.value.splice(index, 1)
}
</script>

Vue生态系统

Vue拥有完整的生态系统,包括路由、状态管理、构建工具等

Vue Router

官方路由管理器

Pinia

现代状态管理库

Vite

快速构建工具

Nuxt.js

全栈框架

Vue 交互演示

下面是一个简单的Vue待办事项演示,展示了双向绑定和列表渲染:

React vs Vue 深度对比

全面对比两个框架的特点和适用场景

对比维度
React
Vue.js
学习曲线
中等

需要理解JSX、函数式编程概念

简单

渐进式学习,模板语法接近HTML

语法风格
JSX

JavaScript中编写HTML

模板

基于HTML的模板语法

数据绑定
单向

单向数据流,显式状态更新

双向

支持双向绑定,v-model指令

状态管理
Redux/Zustand

需要第三方库,生态丰富

Pinia/Vuex

官方解决方案,集成度高

社区生态
庞大

Facebook支持,企业级应用广泛

活跃

快速增长,中文社区友好

性能表现
优秀

虚拟DOM,代码分割支持好

卓越

响应式系统优化,包体积小

框架选择指南

选择 React 如果你...

  • 喜欢函数式编程思想
  • 需要构建大型企业级应用
  • 想要丰富的第三方生态
  • 团队有JavaScript基础较好
  • 需要React Native做移动开发

选择 Vue 如果你...

  • 希望快速上手和开发
  • 喜欢模板语法和双向绑定
  • 需要渐进式集成到现有项目
  • 团队技术水平参差不齐
  • 追求简洁的API和文档

实战项目练习

通过实际项目巩固框架知识

初级项目

计数器应用

简单

创建一个简单的计数器,学习状态管理和事件处理

React Hooks Vue Composition API
功能要求:
  • 显示当前计数
  • 增加/减少按钮
  • 重置功能
  • 数字动画效果

待办事项列表

简单

构建经典的Todo应用,掌握列表渲染和表单处理

列表渲染 表单处理
功能要求:
  • 添加新任务
  • 标记完成状态
  • 删除任务
  • 筛选显示

中级项目

天气预报应用

中等

调用天气API,展示天气信息,学习异步数据处理

API调用 异步处理 错误处理
功能要求:
  • 搜索城市天气
  • 显示详细信息
  • 7天预报
  • 地理位置获取

购物车系统

中等

构建电商购物车,学习状态管理和组件通信

状态管理 组件通信 本地存储
功能要求:
  • 商品列表展示
  • 添加到购物车
  • 数量调整
  • 总价计算

高级项目

社交媒体仪表板

困难

构建完整的单页应用,包含路由、认证、实时数据

路由系统 用户认证 实时数据 图表展示
功能要求:
  • 用户登录注册
  • 数据可视化
  • 实时通知
  • 响应式设计

协作文档编辑器

困难

实现实时协作编辑功能,挑战复杂状态同步

WebSocket 富文本编辑 冲突解决 版本控制
功能要求:
  • 实时协作编辑
  • 版本历史
  • 权限管理
  • 冲突处理

项目开发建议

先设计后编码

在开始编码前,先画出组件结构图和数据流图

组件化思维

将UI拆分成独立、可复用的组件

善用开发工具

熟练使用React DevTools或Vue DevTools

版本控制

每个功能完成后及时提交到Git

学习资源推荐

React 学习资源

官方文档

React官方文档,最权威的学习资源

访问

Create React App

官方脚手架工具,快速创建React应用

访问

React Router

React官方路由库

访问

Vue 学习资源

Vue.js官网

Vue.js官方网站和文档

访问

Vue CLI

Vue官方脚手架工具

访问

Vite

下一代前端构建工具

访问

通用资源

MDN Web Docs

Web技术权威文档

访问

Can I Use

检查浏览器兼容性

访问

CodeSandbox

在线代码编辑器和沙盒

访问