React 所有的 hooks 方法,以及用法

‌React中的Hooks主要包括以下几种‌:

  1. ‌useState‌:用于在函数组件中添加状态。通过useState,你可以定义一个状态变量和一个更新该状态的函数。例如,创建一个计数器组件:

function Counter() {

const count, setCount = useState(0);

return (

<div>

<p>You clicked {count} times</p>

<button onClick={() => setCount(count + 1)}>Click me</button>

</div>

);

}

  1. ‌useEffect‌:用于在组件渲染后执行副作用操作,如数据获取、订阅或手动更改DOM。useEffect可以接受一个函数和一个依赖数组作为参数。例如,跟踪点击次数:

function Counter() {

const count, setCount = useState(0);

useEffect(() => {

console.log(count);

}, count); // 仅在 count 更改时运行此副作用

return (

<div>

<p>You clicked {count} times</p>

<button onClick={() => setCount(count + 1)}>Click me</button>

</div>

);

}

  1. ‌useContext‌:用于访问React上下文中的值。例如,使用全局状态管理库时:

function MyComponent() {

const value = useContext(MyContext);

return <div>{value}</div>;

}

  1. ‌useReducer‌:用于处理复杂的状态逻辑。useReducer接受一个reducer函数和一个初始状态,返回当前状态和一个dispatch函数。例如:

function reducer(state, action) {

switch (action.type) {

case 'increment':

return { count: state.count + 1 };

default:

return state;

}

}

function Counter() {

const state, dispatch = useReducer(reducer, { count: 0 });

return (

<div>

<p>{state.count}</p>

<button onClick={() => dispatch({ type: 'increment' })}>Increment</button>

</div>

);

}

  1. ‌useMemo‌:用于缓存计算结果,避免在每次渲染时重新计算。例如,缓存昂贵的计算结果:

function MyComponent() {

const expensiveValue = useMemo(() => { /* 昂贵的计算 */ }, dependency); // 依赖项变化时重新计算

return <div>{expensiveValue}</div>;

}

  1. ‌useCallback‌:用于缓存函数,避免在每次渲染时重新创建函数。例如,优化组件性能:

function MyComponent() {

const memoizedCallback = useCallback(() => { /* 函数 */ }, dependency); // 依赖项变化时重新创建函数

return <div>{memoizedCallback}</div>; // 使用 memoizedCallback 而不是直接使用函数定义,以避免重新创建函数带来的性能问题。

}

  1. ‌useRef‌:用于在组件之间共享引用值,通常用于DOM元素的引用。例如,获取DOM元素的引用:

function MyComponent() {

const refContainer = useRef(initialValue); // 创建一个ref对象并初始化值,通常用于DOM元素的引用。例如:<div ref={refContainer}>Hello</div>。然后可以通过refContainer.current访问DOM元素。

return <div ref={refContainer}>Hello</div>; // 使用refContainer作为ref属性。

}

相关推荐
OpsEye4 小时前
大模型账单对账难:不同厂商 Token 统计口径差异怎么处理
javascript·ai编程
全栈项目管理程序猿4 小时前
ArcGIS JS 基础教程(32):体元系列 - VoxelSlice 体元切片
前端·javascript
结局无敌6 小时前
React Native for OpenHarmony 实战:三方库 react-native-modal-dialog 的鸿蒙化适配指南
深度学习·算法·react native·react.js·harmonyos
拖孩6 小时前
AI 帮我写的小程序「厨菜记」上线满月了,挣了两百块!!!
前端·后端·微信小程序
用户360055579006 小时前
Kestrel_VLLM - 13 · 为什么排除 MoE FFN Tiling 与 Tensor Core
前端
Hilaku6 小时前
AI 流式输出都用 SSE,什么时候必须换 WebSocket?
前端·javascript·程序员
奇牙coding6 小时前
Codex CLI 升级后多文件编辑静默失效:config.yaml 枚举变更排查与修复指南
java·前端·javascript·ai
小羊没烦恼!6 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
程序员老赵7 小时前
Docker 部署 Filestash:轻松搭建浏览器文件管理平台
前端·docker·开源
夏天要喝冰可乐7 小时前
给 23 万字修仙小说造个阅读站:浏览器内打包 EPUB 分页阅读 + 三主题实战
前端·产品·全栈