React 中级阶段学习计划

server/2024/10/22 7:47:24/

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的编辑器或平台中,以便于查看和使用。

http://www.ppmy.cn/server/133836.html

相关文章

C#中Task.ContinueWith如何使用

Task.ContinueWith 方法是 Task 类的一个成员&#xff0c;它允许你为一个任务添加一个延续操作。这个延续操作会在任务完成时执行&#xff0c;无论是成功完成、发生异常还是被取消。你可以使用这个方法来执行一些清理工作&#xff0c;或者基于前一个任务的结果来启动另一个任务…

Java中的基本数据类型和引用类型存储在JVM中那个区域?

首先说明&#xff0c;"java中的基本数据类型一定存储在栈中的吗&#xff1f;”这句话肯定是错误的。 下面让我们一起来分析下原因&#xff1a; 基本数据类型是放在栈中还是放在堆中&#xff0c;这取决于基本类型在何处声明&#xff0c;下面对数据类型在内存中的存储问题…

第三季度中国游戏市场收入创历史新高;京东物流与淘宝天猫达成合作;YouTube 上线“用相机拍摄”标签....|网易数智日报

第三季度中国游戏市场收入917.66亿&#xff0c;创历史新高 中国音数协游戏工委今日发布了最新的 2024 年第三季度中国游戏产业季度报告。 数据显示&#xff0c;2024 年第三季度中国游戏市场收入 917.66 亿元&#xff0c;环比增长 22.96%&#xff0c;同比增长 8.95%。 中国音…

【Axure高保真原型】标签管理可视化驾驶舱长页面案例

今天和大家分享标签管理可视化驾驶舱长页面案例的原型模板&#xff0c;包括我的工作、通告消息、标签总体调用趋势、标签应用业务场景对比、标签使用排名、各个标签使用情况……具体效果可以点击下方视频观看或打开下方预览地址查看哦 【原型效果】 【Axure高保真原型】标签管…

信创服务器下连接kingbase并执行SQL的脚本

信创服务器下连接kingbase并执行SQL的脚本 .bash_profile Get the aliases and functions if [ -f ~/.bashrc ]; then. ~/.bashrc fiUser specific environment and startup programs PATH$PATH:/home/kingbase/Server/bin export PATH export LD_LIBRARY_PATH/home/kingba…

nginx中的HTTP 负载均衡

HTTP 负载均衡&#xff1a;如何实现多台服务器的高效分发 为了让流量均匀分配到两台或多台 HTTP 服务器上&#xff0c;我们可以通过 NGINX 的 upstream 代码块实现负载均衡。 方法 在 NGINX 的 HTTP 模块内使用 upstream 代码块对 HTTP 服务器实施负载均衡&#xff1a; upstr…

opencv学习:人脸识别FisherFaceRecognizer_create算法的使用

FisherFaceRecognizer_create算法 cv2.face.FisherFaceRecognizer_create() 是 OpenCV 中用于创建 FisherFace 人脸识别模型的函数。FisherFace 是一种基于线性判别分析&#xff08;Linear Discriminant Analysis&#xff0c;LDA&#xff09;的人脸识别方法。这种方法的核心思…

DataWhale10月动手实践——Bot应用开发task04学习笔记

一、图像流 1. 什么是图像流&#xff1f; 图像流是一种直观的图像处理流程工具&#xff0c;用户可以灵活组合各类图像处理模块。该系统将不同的图像处理工具模块化&#xff0c;并通过可视化界面&#xff0c;将这些模块以拖拽方式组合&#xff0c;构建完整的处理流程。用户可以…