实现 useUpdate 强制组件重新渲染
使用 useReducer 实现强制 React 组件重新渲染的自定义 Hook
问题
实现一个 useUpdate Hook,调用时强制 React 组件重新渲染。
解答
利用 useReducer 触发状态更新来实现强制重新渲染:
import { useReducer } from 'react';
const updateReducer = (num: number): number => (num + 1) % 1_000_000;
export default function useUpdate(): () => void {
const [, update] = useReducer(updateReducer, 0);
return update;
}
使用示例:
function MyComponent() {
const update = useUpdate();
return (
<button onClick={update}>
强制重新渲染
</button>
);
}
关键点
- 使用
useReducer而非useState,因为 reducer 函数每次都返回新值,确保触发更新 - 通过递增计数器并取模 1,000,000 避免数字无限增长
- 忽略
useReducer返回的状态值,只使用 dispatch 函数 - 每次调用
update()都会触发组件重新渲染
目录