React 中级教程

embedded/2025/2/23 2:43:07/

1. useState 与 setState 深入理解

import React, { useState } from 'react';const Counter = () => {const [count, setCount] = useState(0);const increment = () => {setCount(count + 1); // setState 会异步更新};return (<div><p>Count: {count}</p><button onClick={increment}>Increment</button></div>);
};export default Counter;

概述: useState 是 React 中的一个核心 Hook,用于声明组件状态。使用 useState 时,状态的更新通常是异步的,可能在事件处理和渲染周期中产生一些延迟。在此示例中,count 作为一个状态变量,setCount 用来更新它。这个机制使得 React 能够更高效地管理和更新 UI。


2. useEffect 副作用和清理

import React, { useState, useEffect } from 'react';const Timer = () => {const [seconds, setSeconds] = useState(0);useEffect(() => {const interval = setInterval(() => {setSeconds(prev => prev + 1);}, 1000);return () => clearInterval(interval); // 清理定时器}, []); // 空数组表示只在组件挂载时执行一次return <div>Time: {seconds}s</div>;
};export default Timer;

概述: useEffect 用于处理副作用,例如定时器、网络请求和 DOM 操作。通过传递空数组作为依赖项,确保副作用只在组件挂载时执行一次。在清理阶段,useEffect 返回一个清理函数来避免内存泄漏和无效的副作用,如这里的定时器。


3. 自定义 Hook:使用 LocalStorage

import { useState, useEffect } from 'react';function useLocalStorage(key, initialValue) {const [value, setValue] = useState(() => {const storedValue = window.localStorage.getItem(key);return storedValue ? JSON.parse(storedValue) : initialValue;});useEffect(() => {window.localStorage.setItem(key, JSON.stringify(value));}, [key, value]);return [value, setValue];
}const App = () => {const [name, setName] = useLocalStorage('name', 'Guest');return (<div><input value={name} onChange={(e) => setName(e.target.value)} /><p>Welcome, {name}!</p></div>);
};export default App;

概述: 自定义 Hook 允许你将逻辑复用到多个组件中。此示例展示了如何创建一个处理 LocalStorage 的自定义 Hook,确保状态在页面刷新时保持。它利用 useState 初始化值,并通过 useEffect 更新 localStorage


4. useReducer 替代 useState

import React, { useReducer } from 'react';const initialState = { count: 0 };function reducer(state, action) {switch (action.type) {case 'increment':return { count: state.count + 1 };case 'decrement':return { count: state.count - 1 };default:return state;}
}const Counter = () => {const [state, dispatch] = useReducer(reducer, initialState);return (<div><p>Count: {state.count}</p><button onClick={() => dispatch({ type: 'increment' })}>Increment</button><button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button></div>);
};export default Counter;


http://www.ppmy.cn/embedded/162279.html

相关文章

Go 语言调用 SiliconFlow 的 Deepseek AI Janus-Pro-7B 模型进行图像生成

使用 Go 调用 SiliconFlow 图像生成 API 概述 本文档介绍如何使用 Go 语言调用 SiliconFlow 的 Deepseek AI Janus-Pro-7B 模型进行图像生成。 环境准备 Go 1.20 或更高版本网络连接SiliconFlow API 令牌 依赖管理 在项目根目录创建 go.mod 文件&#xff1a; go mod ini…

Docker compose 以及镜像使用

Docker compose 以及镜像使用 高级配置 使用 Docker Compose Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。以下是一个 docker-compose.yml 示例&#xff1a; version: 3 services:web:image: my-appbuild: .ports:- "8000:8000"volumes:- …

docker pull 报错Get “https://registry-1.docker.io/v2/“: net/http: request canceled while waiting for c

报错 &#xff1a;Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) 解决方法 配置加速地址 vim /etc/docker/daemon.json 添加以下内容 {"registry-…

CSS实现中心放大动画

所有的动画代码可在css动画网站直接复制代码&#xff1b; 以下为上述演示动画代码&#xff1a; .scale-up-center {animation: scale-up-center 0.4s cubic-bezier(0.390, 0.575, 0.565, 1.000) both;}keyframes scale-up-center {0% {transform: scale(0.5);}100% {transform:…

Android ndk兼容 64bit so报错

1、报错logcat如下 2025-01-13 11:34:41.963 4687-4687 DEBUG pid-4687 A #01 pc 00000000000063b8 /system/lib64/liblog.so (__android_log_default_aborter16) (BuildId: 467c2038cdfa767245f9280e657fdb85) 2025…

13.8 聚焦应用场景的Prompt设计实战:从通用到领域专用的翻译质量跃升

聚焦应用场景的Prompt设计实战:从通用到领域专用的翻译质量跃升 关键词:领域特定Prompt设计、翻译质量优化、动态术语控制、多阶段推理链、Prompt版本管理 1. 翻译Prompt设计核心原则 1.1 领域知识深度渗透 def build_medical_prompt(): return ChatPromptTemplate.from_…

ubuntu部署postgresql+timescaladb时序数据库

ubuntu部署postgresqltimescaladb时序数据库 中间件版本 postgresql-1414.15-0ubuntu0.22.04.1timescaledb-2-postgresql-142.17.2~ubuntu22.04 pg数据库安装 sudo apt install -y postgresql-1414.15-0ubuntu0.22.04.1 sudo systemctl start postgresql sudo systemctl en…

使用vllm docker容器部署大语言模型

说明 最近deepseek比较火&#xff0c;我在一台4卡4090的服务器上尝试部署了一下&#xff0c;记录下部署步骤。 安装过程 安卓docker和nvidia-container-toolkit 安装19.03版本以上的docker-ce即可。安装步骤参考清华docker源上的安装步骤&#xff1a;Docker CE 软件仓库 为…