常用 Hooks
-
useState:声明状态变量。typescript 复制代码 const [count, setCount] = useState<number>(0);
-
useEffect:副作用处理。typescript复制代码useEffect(() => { // 执行副作用 return () => { // 清理副作用 }; }, [dependency]); -
useContext:使用上下文。typescript 复制代码 const value = useContext<MyContextType>(MyContext);
-
useReducer:复杂状态逻辑管理。typescript 复制代码 const [state, dispatch] = useReducer(reducer, initialState);
-
useMemo:性能优化,记住计算结果。typescript 复制代码 const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
-
useCallback:性能优化,记住函数定义。typescript复制代码const memoizedCallback = useCallback(() => { doSomething(a, b); }, [a, b]);
Hooks 使用的易错点
-
useState和useEffect依赖-
易错点:在
useEffect中忘记依赖数组,导致无限循环。 -
解决方案:确保在
useEffect中添加依赖数组。
typescript复制代码useEffect(() => { // 依赖a和b }, [a, b]); -
-
useEffect清理函数-
易错点:在
useEffect中没有正确地清理副作用,导致内存泄漏。 -
解决方案:确保在
useEffect中返回一个清理函数。
typescript复制代码useEffect(() => { const subscription = subscribeToSomething(); return () => { subscription.unsubscribe(); }; }, []); -
-
useMemo和useCallback依赖-
易错点:在
useMemo和useCallback中忘记依赖数组,导致没有性能优化效果。 -
解决方案:确保在
useMemo和useCallback中添加依赖数组。
typescript复制代码const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]); const memoizedCallback = useCallback(() => { doSomething(a, b); }, [a, b]); -
-
useReducer初始状态-
易错点:在
useReducer中直接修改状态对象。 -
解决方案:确保在
reducer函数中返回新的状态对象。
typescript复制代码const reducer = (state: StateType, action: ActionType): StateType => { switch (action.type) { case 'UPDATE': return { ...state, value: action.payload }; default: return state; } }; -










