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

React 中级阶段学习计划

React 中级阶段学习计划

目标

  • 掌握状态管理和路由。
  • 能够调用API并处理异步数据。
  • 学会使用CSS-in-JS和CSS Modules进行样式处理。

学习内容

状态管理

React Context API
  • Context API:用于在组件树中传递数据,避免多层props传递。
  • 示例
    import React, { createContext, useContext, useState } from 'react';// 创建Context
    const ThemeContext = createContext();// 提供者组件
    function ThemeProvider({ children }) {const [theme, setTheme] = useState('light');const toggleTheme = () => {setTheme((prevTheme) => (prevTheme === 'light' ? 'dark' : 'light'));};return (<ThemeContext.Provider value={{ theme, toggleTheme }}>{children}</ThemeContext.Provider>);
    }// 消费者组件
    function App() {const { theme, toggleTheme } = useContext(ThemeContext);return (<div style={{ background: theme === 'light' ? '#fff' : '#333', color: theme === 'light' ? '#000' : '#fff' }}><h1>Current Theme: {theme}</h1><button onClick={toggleTheme}>Toggle Theme</button></div>);
    }function Root() {return (<ThemeProvider><App /></ThemeProvider>);
    }export default Root;
Redux
  • Redux:一个用于管理应用状态的库,适用于大型应用。
  • 安装
    npm install redux react-redux
    
  • 示例
    import React from 'react';
    import { createStore } from 'redux';
    import { Provider, useSelector, useDispatch } from 'react-redux';// Reducer
    const counterReducer = (state = { count: 0 }, action) => {switch (action.type) {case 'INCREMENT':return { ...state, count: state.count + 1 };case 'DECREMENT':return { ...state, count: state.count - 1 };default:return state;}
    };// Store
    const store = createStore(counterReducer);// Action Creators
    const increment = () => ({ type: 'INCREMENT' });
    const decrement = () => ({ type: 'DECREMENT' });// Component
    function Counter() {const count = useSelector((state) => state.count);const dispatch = useDispatch();return (<div><p>Count: {count}</p><button onClick={() => dispatch(increment())}>Increment</button><button onClick={() => dispatch(decrement())}>Decrement</button></div>);
    }function App() {return (<Provider store={store}><Counter /></Provider>);
    }export default App;
    

路由

React Router
  • React Router:用于在React应用中实现页面导航。
  • 安装
    npm install react-router-dom
    
  • 示例
    import React from 'react';
    import { BrowserRouter as Router, Route, Switch, Link } from 'react-router-dom';// 页面组件
    function Home() {return <h2>Home</h2>;
    }function About() {return <h2>About</h2>;
    }function Contact() {return <h2>Contact</h2>;
    }// 主组件
    function App() {return (<Router><div><nav><ul><li><Link to="/">Home</Link></li><li><Link to="/about">About</Link></li><li><Link to="/contact">Contact</Link></li></ul></nav><Switch><Route path="/" exact component={Home} /><Route path="/about" component={About} /><Route path="/contact" component={Contact} /></Switch></div></Router>);
    }export default App;
    

API调用

使用fetch和axios
  • fetch:浏览器内置的API调用方法。
  • axios:一个基于Promise的HTTP客户端,支持浏览器和Node.js。
  • 安装axios
    npm install axios
    
  • 示例
    import React, { useState, useEffect } from 'react';
    import axios from 'axios';function FetchData() {const [data, setData] = useState(null);useEffect(() => {axios.get('https://jsonplaceholder.typicode.com/posts').then(response => {setData(response.data);}).catch(error => {console.error('Error fetching data:', error);});}, []);return (<div><h1>Data from API</h1>{data ? (<ul>{data.map(item => (<li key={item.id}>{item.title}</li>))}</ul>) : (<p>Loading...</p>)}</div>);
    }export default FetchData;
    

样式处理

CSS-in-JS
  • styled-components:一个流行的CSS-in-JS库。
  • 安装
    npm install styled-components
    
  • 示例
    import React from 'react';
    import styled from 'styled-components';const Button = styled.button`background-color: ${props => props.primary ? 'blue' : 'white'};color: ${props => props.primary ? 'white' : 'black'};padding: 10px 20px;border: none;border-radius: 5px;cursor: pointer;
    `;function App() {return (<div><Button primary>Primary Button</Button><Button>Secondary Button</Button></div>);
    }export default App;
    
CSS Modules
  • CSS Modules:允许你编写局部作用域的CSS。
  • 示例
    // Button.module.css
    .button {background-color: white;color: black;padding: 10px 20px;border: none;border-radius: 5px;cursor: pointer;
    }.primary {background-color: blue;color: white;
    }// Button.js
    import React from 'react';
    import styles from './Button.module.css';function Button({ primary, children }) {return (<button className={`${styles.button} ${primary ? styles.primary : ''}`}>{children}</button>);
    }export default Button;// App.js
    import React from 'react';
    import Button from './Button';function App() {return (<div><Button primary>Primary Button</Button><Button>Secondary Button</Button></div>);
    }export default App;
    

实践项目

待办事项列表

  1. 创建项目
    npx create-react-app todo-list
    cd todo-list
    npm start
    
  2. 创建组件
    • TodoForm.js:添加待办事项的表单
      import React, { useState } from 'react';function TodoForm({ addTodo }) {const [value, setValue] = useState('');const handleSubmit = (e) => {e.preventDefault();if (!value) return;addTodo(value);setValue('');};return (<form onSubmit={handleSubmit}><inputtype="text"className="input"value={value}onChange={(e) => setValue(e.target.value)}placeholder="Add a new task"/><button type="submit" className="button">Add</button></form>);
      }export default TodoForm;
      
    • TodoList.js:显示待办事项列表
      import React from 'react';function TodoList({ todos, removeTodo }) {return (<div>{todos.map((todo, index) => (<div key={index} className="todo"><span>{todo}</span><button onClick={() => removeTodo(index)}>Delete</button></div>))}</div>);
      }export default TodoList;
      
    • App.js:主组件
      import React, { useState } from 'react';
      import TodoForm from './TodoForm';
      import TodoList from './TodoList';function App() {const [todos, setTodos] = useState([]);const addTodo = (text) => {const newTodos = [...todos, text];setTodos(newTodos);};const removeTodo = (index) => {const newTodos = [...todos];newTodos.splice(index, 1);setTodos(newTodos);};return (<div className="app"><div className="todo-list"><h1>Todo List</h1><TodoForm addTodo={addTodo} /><TodoList todos={todos} removeTodo={removeTodo} /></div></div>);
      }export default App;
      

电子商务网站

  1. 创建项目
    npx create-react-app ecommerce
    cd ecommerce
    npm start
    
  2. 安装axios
    npm install axios
    
  3. 创建组件
    • ProductList.js:显示产品列表
      import React, { useState, useEffect } from 'react';
      import axios from 'axios';function ProductList() {const [products, setProducts] = useState([]);useEffect(() => {axios.get('https://fakestoreapi.com/products').then(response => {setProducts(response.data);}).catch(error => {console.error('Error fetching products:', error);});}, []);return (<div className="product-list">{products.map(product => (<div key={product.id} className="product"><img src={product.image} alt={product.title} /><h3>{product.title}</h3><p>${product.price}</p></div>))}</div>);
      }export default ProductList;
      
    • App.js:主组件
      import React from 'react';
      import ProductList from './ProductList';function App() {return (<div className="App"><h1>E-commerce Website</h1><ProductList /></div>);
      }export default App;
      

建议

  • 定期回顾:每周花时间回顾本周所学内容,确保知识点牢固掌握。
  • 参与社区:加入React相关的论坛、Slack群组或Discord服务器,与其他开发者交流心得。
  • 阅读源码:尝试阅读一些简单的React库的源码,提高代码理解和分析能力。

希望这个学习计划能够帮助你系统地学习React中级技能,并通过实践项目巩固所学知识。祝你学习顺利!


你可以将上述Markdown内容复制到任何支持Markdown的编辑器或平台中,以便于查看和使用。

相关文章:

React 中级阶段学习计划

React 中级阶段学习计划 目标 掌握状态管理和路由。能够调用API并处理异步数据。学会使用CSS-in-JS和CSS Modules进行样式处理。 学习内容 状态管理 React Context API Context API&#xff1a;用于在组件树中传递数据&#xff0c;避免多层props传递。示例&#xff1a;im…...

[产品管理-47]:产品市场调研 - 一级市场、二级市场、次级市场?

目录 一、产品销售环节的一级二级市场 1、一级市场 2、二级市场 3、一级市场与二级市场的互动关系 二、金融中的一级二级市场 1、一级市场&#xff08;Primary Market&#xff09;- 新股发行、定向发行 2、二级市场&#xff08;Secondary Market&#xff09;- 普通投资者…...

Linux零基础教程学习(黑马)

1.初识Linux 1.2远程连接Linux系统 图形化、命令行 对于操作系统的使用&#xff0c;有2种使用形式&#xff1a; 图形化页面使用操作系统 以命令的形式使用操作系统 不论是Windows还是Linux亦或是MacOS系统&#xff0c;都是支持这两种使用形式。 图形化&#xff1a;使用操作…...

一款零依赖、跨平台的流媒体协议处理工具,支持 RTSP、WebRTC、RTMP 等视频流协议的处理

大家好&#xff0c;今天给大家分享一款功能强大的流媒体协议处理工具go2rtc&#xff0c;支持多种协议和操作系统&#xff0c;具有零依赖、零配置、低延迟等特点。 项目介绍 go2rtc可以从各种来源获取流&#xff0c;包括 RTSP、WebRTC、HomeKit、FFmpeg、RTMP 等&#xff0c;并…...

PHP 正则验证A-Z且排除某字母

都已经找到这里来了&#xff0c;相信已经尝试很多办法了&#xff0c;那么我们直接上答案 关键正则&#xff1a;(?!.*[IO]) //验证5到6个大写字母且排除I和O if (preg_match(/^(?!.*[IO])[A-Z\d]{5,6}$/u, AAAAM)) {echo "匹配成功"; } else {echo "匹配失败…...

如何安全运行别人上传的Python代码?

写后端的同学&#xff0c;有时候需要在网站上实现一个功能&#xff0c;让用户上传或者编写自己的Python代码。后端再运行这些代码。 涉及到用户自己上传代码&#xff0c;我们第一个想到的问题&#xff0c;就是如何避免用户编写危险命令。如果用户的代码里面涉及到下面两行&…...

matlab相位图

% 清空工作空间和命令窗口 clear; clc; % 模拟生成时间t&#xff0c;位移y(t)和角位移theta(t) t linspace(0, 100, 1000); % 时间从0到100&#xff0c;包含1000个点 y 1e-5 * sin(2 * pi * 0.1 * t) .* exp(-0.01 * t); % 位移y(t) 振荡衰减 theta 1e-6 * cos(2 * pi * …...

C语言笔记(指针的进阶)

目录 1.字符指针 2.指针数组 3.数组指针 3.1.创建数组指针 3.2.&数组名和数组名 1.字符指针 int main() { char ch w;char* pc &ch;const char *p "abcdef";//常量字符串 产生的值就是首元素的地址//常量字符串不能被修改 因此需要加上一个…...

NodeJS连接MySQL 8.4报错:code: ‘ER_TABLEACCESS_DENIED_ERROR‘

NodeJS连接MySQL 8.4报错&#xff1a;code: ER_TABLEACCESS_DENIED_ERROR { code: ER_TABLEACCESS_DENIED_ERROR, errno: 1142, sqlMessage: "SELECT command denied to user 用户名localhost for table 表名", sqlState: 42000, index: 0, sql: SELECT …...

力扣66~70题

题66&#xff08;简单&#xff09;&#xff1a; python代码&#xff1a; class Solution:def plusOne(self, digits: List[int]) -> List[int]:s_str.join([str(i) for i in digits])nstr(int(s_str)1)n_strlist(n)res[int(i) for i in n_str]return res题67&#xff08;简…...

Axure重要元件三——中继器添加数据

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 本节课&#xff1a;中继器添加数据 课程内容&#xff1a;添加数据项、自动添加序号、自动添加数据汇总 应用场景&#xff1a;表单数据的添加 案例展示&#xff1a; 步骤…...

矩阵系统哪家好~矩阵短视频运营~怎么矩阵OEM

一、引言 在当今的数字化时代&#xff0c;矩阵系统在众多领域中发挥着至关重要的作用&#xff0c;如视频监控、信号切换、自动化控制等。然而&#xff0c;如何判断一个矩阵系统是否好用成为了许多用户面临的问题。本文将从多个方面探讨矩阵系统好用与否的判断标准&#xff0c;希…...

Axure树形菜单展开与折叠

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;Axure树形菜单展开与折叠 主要内容&#xff1a;树形菜单制作——层级关系——隐藏与显示——值的变化——多层交互 应用场景&#xff1a;关系树、菜…...

开发一个微信小程序要多少钱?

在当今数字化时代&#xff0c;微信小程序成为众多企业和个人拓展业务、提供服务的热门选择。那么&#xff0c;开发一个微信小程序究竟需要多少钱呢&#xff1f; 开发成本主要取决于多个因素。首先是功能需求的复杂程度。如果只是一个简单的信息展示小程序&#xff0c;功能仅限…...

AnaTraf | TCP重传的工作原理与优化方法

目录 什么是TCP重传&#xff1f; TCP重传的常见触发原因 TCP重传对网络性能的影响 1. 高延迟与重传 2. 吞吐量的下降 如何优化和减少TCP重传 1. 优化网络设备配置 2. 优化网络链路 3. 网络带宽的合理规划 4. 部署CDN和缓存策略 结语 AnaTraf 网络性能监控系统NPM | …...

python从0快速上手(一)python环境搭建 windows macos linux

Python环境搭建超详细指南 Python是一种广泛使用的高级编程语言&#xff0c;它以其简洁的语法和强大的功能而受到开发者的喜爱。对于初学者来说&#xff0c;搭建一个合适的Python开发环境是开始Python之旅的第一步。本文将为你提供一个超级详细的Python环境搭建指南&#xff0…...

麒麟aarch64架构下安装compat-openssl10

问题描述&#xff1a; 麒麟aarch64架构下安装mysql8.0.40,报错nothing provides libcrypto.so.10()(64bit) needed by 原因&#xff1a; 你当前系统的 OpenSSL 版本与 MySQL 8.0.40 所需的库不匹配。MySQL 8.0.40 需要 libcrypto.so.10&#xff0c;而你的系统使用的是 OpenS…...

React远程组件

什么是远程组件&#xff1f; 远程组件指的是从远程服务器动态加载的组件&#xff0c;这些组件可以是React、Vue等框架的组件。 为什么需要远程组件 本质上就是为了解决复用问题&#xff0c;那引出新的问题有几种公共项目代码复用方式&#xff1f; Git仓库 将公共代码单独抽…...

ssm教师上课系统+vue

系统包含&#xff1a;源码论文 所用技术&#xff1a;SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习&#xff0c;获取源码请私聊我 需要定制请私聊 目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 [2 系统…...

【C】分支和循环--猜数字游戏

分支和循环 练习&#xff1a;猜数字游戏 游戏要求&#xff1a; 1&#xff1b;电脑自动生成1~100的随机数 2&#xff1b;玩家猜数字&#xff0c;猜数字的过程中&#xff0c;根据猜测数据的大小给出大了或小了的反馈&#xff0c;直到猜出&#xff0c;游戏结束 随机数生成 函数…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...