React 语法速查表 - React 常用 Hooks 与组件开发大全

这张速查面向以函数组件和 Hooks 为主业的 React 开发者。内容从 useState/useEffect 的状态与副作用核心讲起,过渡到 useReducer、Context、useId 等进阶 Hooks,再讲 forwardRef、render props 等组件模式,接着是受控表单与基于 Context 的状态共享,最后落到 React.memo、懒加载和 Suspense 这类性能优化。每条都是可直接复制的片段,并标注好依赖数组与边界情况。读完你应能用 useEffect 驱动异步请求、用 Context 跨组件共享状态,并通过 memo/useCallback 减少不必要的重渲染。

编程语言·共 39 条命令·最后更新 2026-07-21

Hooks 基础 6

const [count, setCount] = useState(0)
useState 返回 [值, 更新函数],调用 setCount 会触发组件重渲染
const [user, setUser] = useState({ name: "", age: 0 })
对象状态的初始值;更新时注意用展开保持不可变
useEffect(() => { fetchData() }, [])
依赖数组为空,只在组件挂载后执行一次,适合拉取初始数据
useEffect(() => { subscribe(id); return () => unsubscribe() }, [id])
带清理回调的副作用,id 变化或卸载时先执行 return 清旧订阅
const ref = useRef(null)
返回可变的 ref 对象,可挂 DOM 节点,也可存跨渲染不丢的值
const memoized = useMemo(() => compute(a, b), [a, b])
依赖不变时复用上次计算结果,避免昂贵计算重复执行

Hooks 进阶 6

const [state, dispatch] = useReducer(reducer, initialState)
复杂状态管理
const value = useContext(MyContext)
跨层级数据共享
useLayoutEffect(() => { measure() }, [deps])
同步执行 DOM 测量
useImperativeHandle(ref, () => ({ focus: () => {} }))
暴露子组件方法给父组件
const id = useId()
生成唯一 ID(SSR 安全)
const [isPending, startTransition] = useTransition()
非阻塞更新(React 18)

组件模式 6

function App({ name, children }) { return <div>{children}</div> }
props 与 children
const Button = forwardRef((props, ref) => <button ref={ref} />)
forwardRef 转发 ref
function withAuth(Component) { return (props) => <Component {...props} /> }
高阶组件(HOC)
function List({ render }) { return items.map(render) }
render props 模式
const Memo = React.memo(Component)
记忆组件避免重渲染
const Lazy = React.lazy(() => import("./Comp"))
懒加载组件

事件与表单 5

<button onClick={(e) => handleClick(e)}>Click</button>
点击事件
<input value={val} onChange={e => setVal(e.target.value)} />
受控组件
<form onSubmit={e => { e.preventDefault(); submit() }}>
表单提交阻止默认刷新
e.stopPropagation()
阻止事件冒泡
e.preventDefault()
阻止默认行为

状态管理 5

setCount(prev => prev + 1)
基于前值更新状态
setUser(prev => ({ ...prev, name: "new" }))
不可变更新对象状态
const ThemeContext = createContext("light")
创建 Context
<ThemeContext.Provider value="dark">
提供 Context 值
const value = useContext(ThemeContext)
消费 Context

性能优化 5

const MemoComp = React.memo(MyComponent)
记忆组件
const value = useMemo(() => expensive(a, b), [a, b])
记忆计算结果
const handler = useCallback(() => {}, [deps])
记忆回调函数
<Suspense fallback={<Loading />}><Lazy /></Suspense>
懒加载与代码分割
const [deferred] = useDeferredValue(value)
延迟更新非关键部分

常用模式 6

{isLoading ? <Loading /> : <Content />}
条件渲染
{show && <Menu />}
短路渲染
{items.map(item => <li key={item.id}>{item.name}</li>)}
列表渲染必须带 key
class ErrorBoundary extends React.Component { static getDerivedStateFromError(e) {} }
错误边界捕获子组件错误
ReactDOM.createPortal(<Modal />, document.body)
Portal 渲染到组件树外
<Comp {...defaultProps} {...props} />
合并默认 props 与传入 props

提示

  • useEffect 的依赖数组为空 [] 时只在挂载时执行一次,类似 componentDidMount。
  • useMemo 和 useCallback 用于性能优化,避免不必要的重新计算和渲染。
  • React 18 的 StrictMode 在开发模式下会双重调用 useEffect,帮助发现副作用问题。
  • Suspense + React.lazy() 可以实现组件懒加载和代码分割。
  • 列表渲染必须为每个元素提供稳定的 key,避免用数组 index 作为 key。

官方参考来源

下方为命令对应的官方权威文档,供你核对最新用法与深入查阅。

由 巧匠 维护

公开更新于 2026年7月21日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们