【react】基础教程

news/2025/2/25 10:19:35

目录

一、React 简介

二、环境搭建

1. 创建 React 项目

2. 项目结构

三、核心概念

1. JSX 语法

2. 组件 (Component)

3. 状态 (State) 与属性 (Props)

4. 事件处理

5. 条件渲染

6. 列表渲染

四、Hooks(函数组件的核心)

1. useState

2. useEffect

3. 其他常用 Hooks

五、组件通信

1. 父传子:通过 Props

2. 子传父:通过回调函数

六、路由管理(使用 React Router)

1. 安装

2. 基础配置

七、状态管理(使用 Context API)

1. 创建 Context

八、进阶学习方向

九、官方资源


一、React 简介

React 是一个用于构建用户界面的 JavaScript 库(专注于视图层),由 Facebook 开发。其核心特性包括:

组件化:将 UI 拆分为独立可复用的组件。

虚拟 DOM:高效更新界面,优化性能。

声明式编程:通过描述 UI 的最终状态,而非具体操作步骤。

二、环境搭建

1. 创建 React 项目

使用官方脚手架工具 create-react-app 快速初始化项目:

npx create-react-app my-app
cd my-app
npm start
2. 项目结构
my-app/
  ├── public/          # 静态资源
  ├── src/             # 源代码
  │    ├── App.js      # 根组件
  │    └── index.js    # 入口文件
  └── package.json     # 依赖配置

三、核心概念

1. JSX 语法

JSX 是 JavaScript 的语法扩展,允许在 JavaScript 中编写类似 HTML 的结构:

const element = <h1>Hello, React!</h1>;
2. 组件 (Component)

函数组件(推荐):

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

类组件

class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}
3. 状态 (State) 与属性 (Props)

Props:父组件传递给子组件的数据(只读)。

State:组件内部管理的动态数据(通过 useState 或 setState 更新)。

function Counter() {
  const [count, setCount] = useState(0); // 使用 useState Hook

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>+1</button>
    </div>
  );
}
4. 事件处理

<button onClick={() => alert('Clicked!')}>Click Me</button>
5. 条件渲染
function Greeting({ isLoggedIn }) {
  return isLoggedIn ? <h1>Welcome Back!</h1> : <h1>Please Login.</h1>;
}
6. 列表渲染

使用 map() 和 key 属性:

function TodoList() {
  const todos = ['Learn React', 'Build a Project', 'Deploy'];
  return (
    <ul>
      {todos.map((todo, index) => (
        <li key={index}>{todo}</li>
      ))}
    </ul>
  );
}

四、Hooks(函数组件的核心)

1. useState

管理组件状态:

const [state, setState] = useState(initialValue);
2. useEffect

处理副作用(如数据请求、DOM 操作):

useEffect(() => {
  // 组件挂载或更新时执行
  fetchData();
  return () => {
    // 组件卸载时清理(如取消订阅)
  };
}, [dependencies]); // 依赖数组控制执行时机
3. 其他常用 Hooks

useContext:访问 React 上下文。

useRef:获取 DOM 引用或保存可变值。

useReducer:复杂状态管理。

五、组件通信

1. 父传子:通过 Props
function Parent() {
  return <Child message="Hello from Parent" />;
}

function Child({ message }) {
  return <p>{message}</p>;
}
2. 子传父:通过回调函数
function Parent() {
  const handleChildClick = (data) => {
    console.log('Child sent:', data);
  };
  return <Child onClick={handleChildClick} />;
}

function Child({ onClick }) {
  return <button onClick={() => onClick('Data from Child')}>Click</button>;
}

六、路由管理(使用 React Router)

1. 安装
npm install react-router-dom
2. 基础配置
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';

function App() {
  return (
    <Router>
      <nav>
        <Link to="/">Home</Link>
        <Link to="/about">About</Link>
      </nav>
      <Route path="/" exact component={Home} />
      <Route path="/about" component={About} />
    </Router>
  );
}

七、状态管理(使用 Context API)

1. 创建 Context
const ThemeContext = React.createContext('light');

function App() {
  return (
    <ThemeContext.Provider value="dark">
      <Toolbar />
    </ThemeContext.Provider>
  );
}

function Toolbar() {
  return <ThemedButton />;
}

function ThemedButton() {
  const theme = useContext(ThemeContext);
  return <button style={{ background: theme }}>Themed Button</button>;
}

八、进阶学习方向

  1. 性能优化React.memouseMemouseCallback

  2. 状态管理库:Redux, MobX

  3. 服务端渲染:Next.js

  4. UI 库:Material-UI, Ant Design

九、官方资源

  • React 官方文档

  • React 中文文档

  • Create React App 指南

通过实践小项目(如 Todo List、博客系统)巩固知识,逐步深入复杂应用开发!

码字不易,欢迎各位大佬点赞


http://www.niftyadmin.cn/n/5865372.html

相关文章

深入讲解微信小程序 <canvas> 标签的 type=“2d“属性

在微信小程序开发中&#xff0c;<canvas> 组件是一个非常强大的工具&#xff0c;允许开发者创建动态图形和动画。然而&#xff0c;正确设置 <canvas> 的 type 属性是确保其正常工作的关键之一。本文将深入探讨 type"2d" 属性的重要性、使用场景及其在实际…

AI人工智能之机器学习sklearn-数据预处理和划分数据集

1、概要 本篇学习AI人工智能之机器学习sklearn数据预处理和划分数据集&#xff0c;从代码层面讲述如何进行数据的预处理和数据集划分。 2、简介 本片讲述数据预处理的标准化处理、归一化处理&#xff0c;以常用的两个类为例 标准化处理类 StandardScaler归一化处理类 MinMax…

【Spark+Hadoop】基于Spark大数据小说数据分析推荐系统(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅

目录 一、项目背景 二、项目目标 三、项目功能 四、项目优势 五、开发技术介绍 六、算法介绍 七、启动部署教程​ 八、项目展示 九、权威教学视频 需要全部项目资料&#xff08;完整系统源码等资料&#xff09;&#xff0c;主页即可。 一、项目背景 随着网络小说行业…

WPF-Avalonia实践一两个页面的相关传递

文章目录 注册两个ViewModel关联-Interaction在 Avalonia 框架中的 Interaction作用目的典型的使用场景显示对话框:文件操作:定义交互属性示例代码视图层处理交互总结例子-实现两个界面信息传递Interaction注册在主VIEWModel中注册异步方法按钮主viewModel对应的显示xaml-使用…

MySQL的InnoDB引擎中的聚簇索引和非聚簇索引有什么区别?

聚簇索引&#xff1a;聚簇索引之所以叫聚簇索引&#xff0c;是因为它将数据存储与索引放到了一块。聚簇索引采用 B 树的数据结构&#xff0c;它的非叶子节点存储索引键值 和 指向子节点的指针&#xff0c;叶子节点存储 完整的数据行。一个表只能有一个聚簇索引&#xff0c;聚集…

Linux项目自动化构建工具-make/Makefile (linux第六课)

目录 背景 介绍 依赖关系的格式 依赖方法的格式 原理 背景 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的规则来指定…

【杂谈】-强化学习遇见链式思维:将大型语言模型转变为自主推理代理

强化学习遇见链式思维&#xff1a;将大型语言模型转变为自主推理代理 文章目录 强化学习遇见链式思维&#xff1a;将大型语言模型转变为自主推理代理1、LLMs中自主推理的必要性1.1 传统LLMs的局限性1.2 链式思维&#xff08;CoT&#xff09;提示的不足1.3 推理中强化学习的必要…

sklearn中的决策树-分类树:剪枝参数

剪枝参数 在不加限制的情况下&#xff0c;一棵决策树会生长到衡量不纯度的指标最优&#xff0c;或者没有更多的特征可用为止。这样的决策树 往往会过拟合。为了让决策树有更好的泛化性&#xff0c;我们要对决策树进行剪枝。剪枝策略对决策树的影响巨大&#xff0c;正确的剪枝策…