Z
ZHANK
⚛️

React 速查表

React Hooks、组件、状态管理、路由、常用模式速查

React 速查表

组件

// 函数组件(推荐)
function Welcome({ name }) {
  return <h1>Hello, {name}!</h1>;
}

// 带 children
function Card({ children }) {
  return <div className="card">{children}</div>;
}

// 条件渲染
{isLoggedIn ? <Dashboard /> : <Login />}
{isLoading && <Spinner />}

Hooks

// useState
const [count, setCount] = useState(0);
setCount(count + 1);
setCount(prev => prev + 1);  // 基于前值

// useEffect
useEffect(() => {
  // 组件挂载时执行
  fetchData();
  return () => { /* 清理 */ };
}, []);  // 空数组 = 只执行一次
useEffect(() => { /* deps 变化时执行 */ }, [dep1, dep2]);

// useRef
const inputRef = useRef(null);
inputRef.current.focus();

// useMemo / useCallback
const memoized = useMemo(() => expensive(a, b), [a, b]);
const callback = useCallback(() => doSomething(a), [a]);

// useContext
const theme = useContext(ThemeContext);

// 自定义 Hook
function useWindowSize() {
  const [size, setSize] = useState({ w: 0, h: 0 });
  useEffect(() => {
    const handler = () => setSize({ w: window.innerWidth, h: window.innerHeight });
    window.addEventListener('resize', handler);
    return () => window.removeEventListener('resize', handler);
  }, []);
  return size;
}

事件处理

<button onClick={() => handleClick(id)}>点击</button>
<input onChange={e => setName(e.target.value)} />
<form onSubmit={e => { e.preventDefault(); submit(); }}>

列表渲染

{items.map(item => (
  <li key={item.id}>{item.name}</li>
))}

状态提升

// 父组件
function Parent() {
  const [value, setValue] = useState('');
  return <Child value={value} onChange={setValue} />;
}
// 子组件
function Child({ value, onChange }) {
  return <input value={value} onChange={e => onChange(e.target.value)} />;
}

路由 (React Router)

import { BrowserRouter, Routes, Route, Link, useParams, useNavigate } from 'react-router-dom';

<BrowserRouter>
  <Routes>
    <Route path="/" element={<Home />} />
    <Route path="/user/:id" element={<User />} />
  </Routes>
</BrowserRouter>

const { id } = useParams();
const navigate = useNavigate();
navigate('/home');