赞
踩
React Hooks 是 React 16.8 版本引入的一项重要特性,它极大地简化和优化了函数组件的开发过程。 React 中常用的 10 个 Hooks,包括 useState、useEffect、useContext、useReducer、useCallback、useMemo、useRef、useLayoutEffect、useImperativeHandle 和 useDebugValue。这些 Hooks 涵盖了状态管理、副作用处理、性能优化、DOM 操作等各个方面,为开发者提供了强大的工具,大幅提高了开发效率和代码质量。
无论您是 React 新手还是老手,全面而深入的 Hooks 知识,帮助您更好地掌握 React 函数组件的开发技巧。让我们一起探索 React Hooks 的强大功能,提升您的 React 开发水平。
useState
import { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>Click me</button>
</div>
);
}
useEffect
import { useState, useEffect } from 'react'; function FetchData() { const [data, setData] = useState([]); useEffect(() => { async function fetchData() { const response = await fetch('/api/data'); const data = await response.json(); setData(data); } fetchData(); }, []); return ( <div> <h1>Fetched Data</h1> <ul> {data.map((item) => ( <li key={item.id}>{item.name}</li> ))} </ul> </div> ); }
useContext
import { createContext, useContext } from 'react'; const ThemeContext = createContext('light'); function App() { return ( <ThemeContext.Provider value="dark"> <ThemedButton /> </ThemeContext.Provider> ); } function ThemedButton() { const theme = useContext(ThemeContext); return <button style={{ backgroundColor: theme === 'dark' ? 'black' : 'white' }}>Theme Button</button>; }
useReducer
import { useReducer } from 'react'; function reducer(state, action) { switch (action.type) { case 'increment': return { count: state.count + 1 }; case 'decrement': return { count: state.count - 1 }; default: throw new Error(); } } function Counter() { const [state, dispatch] = useReducer(reducer, { count: 0 }); return ( <div> <p>Count: {state.count}</p> <button onClick={() => dispatch({ type: 'increment' })}>+</button> <button onClick={() => dispatch({ type: 'decrement' })}>-</button> </div> ); }
useCallback
import { useState, useCallback } from 'react'; function Parent() { const [count, setCount] = useState(0); const handleClick = useCallback(() => { setCount(count + 1); }, [count]); return ( <div> <p>Count: {count}</p> <ChildComponent onClick={handleClick} /> </div> ); } function ChildComponent({ onClick }) { console.log('ChildComponent rendered'); return <button onClick={onClick}>Increment</button>; }
useMemo
import { useState, useMemo } from 'react'; function ExpensiveCalculation() { const [number, setNumber] = useState(0); const doubledNumber = useMemo(() => { return slowlyDoubleNumber(number); }, [number]); return ( <div> <input type="number" value={number} onChange={(e) => setNumber(parseInt(e.target.value))} /> <p>Doubled number: {doubledNumber}</p> </div> ); } function slowlyDoubleNumber(n) { // 模拟一个耗时的计算 let i = 0; while (i < 1000000000) i++; return n * 2; }
useRef
import { useRef } from 'react'; function FocusInput() { const inputRef = useRef(null); const handleClick = () => { inputRef.current.focus(); }; return ( <div> <input type="text" ref={inputRef} /> <button onClick={handleClick}>Focus Input</button> </div> ); }
useLayoutEffect
import { useLayoutEffect, useRef } from 'react';
function MeasureElement() {
const elementRef = useRef(null);
useLayoutEffect(() => {
const element = elementRef.current;
console.log('Element width:', element.offsetWidth);
}, []);
return <div ref={elementRef}>This is the element to measure</div>;
}
useImperativeHandle
import { forwardRef, useImperativeHandle, useRef } from 'react'; const CustomInput = forwardRef((props, ref) => { const inputRef = useRef(null); useImperativeHandle(ref, () => ({ focus: () => { inputRef.current.focus(); } })); return <input type="text" ref={inputRef} />; }); function App() { const inputRef = useRef(null); const handleClick = () => { inputRef.current.focus(); }; return ( <div> <CustomInput ref={inputRef} /> <button onClick={handleClick}>Focus Input</button> </div> ); }
useDebugValue
import { useState, useDebugValue } from 'react';
function useCustomHook() {
const [state, setState] = useState(0);
useDebugValue(`Current state: ${state}`);
// 自定义 Hook 的其他逻辑
return [state, setState];
}
这些是 React 中一些其他常用的 Hooks,它们可以帮助你进一步优化组件的逻辑和性能。每个 Hook 都有其特定的使用场景和使用方式,希望这个列表能为你提供一些参考和启发。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。