当前位置: 首页 > article >正文

【React 前端框架详细教程——带实例开发应用】

React 前端框架详细教程——TODO应用开发

  • 一、环境搭建
    • 1. 安装 Node.js 和 npm
    • 2. 使用 Create React App 创建项目
  • 二、React 核心概念
    • 1. 组件(Component)
    • 2. JSX 语法
    • 3. Props 和 State
  • 三、React 组件生命周期
  • 四、React 路由管理(React Router)
    • 1. 设置基本路由
    • 2. 嵌套路由
  • 五、构建一个简单的 TODO 应用
    • 1. 创建 `TodoApp` 组件
    • 2. 在 `App.js` 中渲染 `TodoApp` 组件
    • 3. 运行应用

React 是一个由 Facebook 开发和维护的开源 JavaScript 库,用于构建用户界面,特别适用于构建单页应用(SPA)。它使得开发者能够高效地构建响应式、动态的 Web 应用。

一、环境搭建

在开始学习 React 之前,首先需要搭建开发环境。

1. 安装 Node.js 和 npm

确保你的电脑上安装了 Node.js 和 npm(Node 包管理器)。可以通过以下命令检查是否安装成功:

node -v
npm -v

2. 使用 Create React App 创建项目

React 提供了一个官方的脚手架工具 create-react-app 来帮助你快速创建 React 项目。

在终端中执行以下命令创建一个新的 React 项目:

npx create-react-app my-react-app
cd my-react-app
npm start

这将启动一个开发服务器,并在浏览器中自动打开你的 React 应用。


二、React 核心概念

1. 组件(Component)

React 应用由多个组件组成,组件是 UI 的基本构建块。每个组件都可以有自己的状态和属性(Props)。

函数组件(Functional Component)

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

类组件(Class Component)

class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

React 推荐使用函数组件,尤其是在 React 16.8 引入了 Hooks 后,函数组件的功能更加完备。

2. JSX 语法

JSX(JavaScript XML)是一种 JavaScript 的语法扩展,看起来像 HTML,但可以嵌入 JavaScript 表达式。

const element = <h1>Hello, world!</h1>;

在 JSX 中,你可以插入 JavaScript 表达式:

const name = 'Alice';
const element = <h1>Hello, {name}</h1>;

3. Props 和 State

  • Props(属性):是传递给组件的数据,父组件通过 props 向子组件传递数据。props 是只读的。
  • State(状态):是组件的本地状态,可以在组件内部动态更新。

使用 Props

function Greeting(props) {
  return <h1>Hello, {props.name}!</h1>;
}

function App() {
  return <Greeting name="Alice" />;
}

使用 State

import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click me</button>
    </div>
  );
}

三、React 组件生命周期

类组件有生命周期方法,用于处理组件的创建、更新和销毁等阶段。对于函数组件,React 提供了 Hooks 来管理生命周期。

常见生命周期方法

  • componentDidMount():组件挂载后调用。
  • componentDidUpdate():组件更新后调用。
  • componentWillUnmount():组件卸载前调用。

函数组件使用 useEffect Hook

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

function Example() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    document.title = `You clicked ${count} times`;
  }, [count]); // 依赖项数组,只有 count 变化时才执行

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click me</button>
    </div>
  );
}

四、React 路由管理(React Router)

在 React 中,使用 react-router-dom 来实现前端路由导航。安装 react-router-dom

npm install react-router-dom

1. 设置基本路由

import React from 'react';
import { BrowserRouter as Router, Route, Switch, Link } from 'react-router-dom';

function Home() {
  return <h2>Home Page</h2>;
}

function About() {
  return <h2>About Page</h2>;
}

function App() {
  return (
    <Router>
      <div>
        <nav>
          <ul>
            <li>
              <Link to="/">Home</Link>
            </li>
            <li>
              <Link to="/about">About</Link>
            </li>
          </ul>
        </nav>

        <Switch>
          <Route path="/" exact component={Home} />
          <Route path="/about" component={About} />
        </Switch>
      </div>
    </Router>
  );
}

2. 嵌套路由

React Router 支持嵌套路由,使得你可以在父路由内渲染子路由。

function Dashboard() {
  return (
    <div>
      <h2>Dashboard</h2>
      <ul>
        <li><Link to="/dashboard/overview">Overview</Link></li>
        <li><Link to="/dashboard/settings">Settings</Link></li>
      </ul>

      <Switch>
        <Route path="/dashboard/overview" component={Overview} />
        <Route path="/dashboard/settings" component={Settings} />
      </Switch>
    </div>
  );
}

function Overview() {
  return <h3>Overview Section</h3>;
}

function Settings() {
  return <h3>Settings Section</h3>;
}

五、构建一个简单的 TODO 应用

接下来,我们构建一个简单的 TODO 应用,演示 React 的基本用法。

1. 创建 TodoApp 组件

import React, { useState } from 'react';

function TodoApp() {
  const [todos, setTodos] = useState([]);
  const [newTodo, setNewTodo] = useState('');

  const handleAddTodo = () => {
    setTodos([...todos, { text: newTodo, completed: false }]);
    setNewTodo('');
  };

  const handleToggleTodo = (index) => {
    const newTodos = [...todos];
    newTodos[index].completed = !newTodos[index].completed;
    setTodos(newTodos);
  };

  const handleDeleteTodo = (index) => {
    const newTodos = todos.filter((_, i) => i !== index);
    setTodos(newTodos);
  };

  return (
    <div>
      <h1>Todo List</h1>
      <input 
        type="text" 
        value={newTodo} 
        onChange={(e) => setNewTodo(e.target.value)} 
        placeholder="Add a new task"
      />
      <button onClick={handleAddTodo}>Add Todo</button>
      
      <ul>
        {todos.map((todo, index) => (
          <li key={index} style={{ textDecoration: todo.completed ? 'line-through' : 'none' }}>
            {todo.text}
            <button onClick={() => handleToggleTodo(index)}>Toggle</button>
            <button onClick={() => handleDeleteTodo(index)}>Delete</button>
          </li>
        ))}
      </ul>
    </div>
  );
}

export default TodoApp;

2. 在 App.js 中渲染 TodoApp 组件

import React from 'react';
import TodoApp from './TodoApp';

function App() {
  return (
    <div className="App">
      <TodoApp />
    </div>
  );
}

export default App;

3. 运行应用

执行 npm start 启动应用,在浏览器中访问 http://localhost:3000,你应该看到一个基本的 TODO 应用,可以添加、删除、标记任务完成。



http://www.kler.cn/a/394278.html

相关文章:

  • Mysql数据库里的SSH连接
  • 建筑施工特种作业人员安全生产知识试题
  • 前端框架大比拼:React.js, Vue.js 及 Angular 的优势与适用场景探讨
  • 使用etl工具kettle的日常踩坑梳理之二、从Hadoop中导出数据
  • 【MySQL】约束
  • 爱普生SG-8200CJ可编程晶振在通信设备中的应用
  • 工程化实战内功修炼测试题(二)
  • spi 回环
  • 【字典树Trie】个人练习-Leetcode-421. Maximum XOR of Two Numbers in an Array
  • 惠州石湾DELL T130服务器黄灯不开机案例
  • 百度秒哒简介
  • #渗透测试#SRC漏洞挖掘#蓝队基础之网络七层杀伤链02
  • 基于 PyTorch 从零手搓一个GPT Transformer 对话大模型
  • 二、vue指令
  • STM32 Option Bytes(选项字节)
  • 【项目组件】第三方库——websocketpp
  • Flutter 应用在真机上调试的流程
  • 【WiFi】ubuntu20.4 WiFi6 无线抓包环境搭建及使用
  • PostgreSQL 序列字段达到最大值
  • 一文窥见神经网络
  • 【QT常用技术讲解】优化网络链接不上导致qt、qml界面卡顿的问题
  • Easyui ComboBox 数据加载完成之后过滤数据
  • AutoDL远程连接技巧
  • php preg_match 不到内容,修改pcre.backtrack_limit解决问题
  • elementui el-table中给表头 el-table-column 加一个鼠标移入提示说明
  • Android 关于使用videocompressor库压缩没有声音的问题