docs/guide/upgrade.zh-CN.md
相较于 ahooks v2 版本,ahooks v3 版本的变更主要包括:
useRequest我们发布了 ahooks-v2 包,你可以同时安装 v2 和 v3 依赖,以过渡升级。
npm install ahooks-v2 --save
npm install ahooks --save
useRequest 完全进行了重写:
run 和 runAsync 两种触发函数。options 参数支持动态变化。pagination、loadMore、formatResult 属性,避免了 useRequest TypeScript 重载,可以更方便的基于 useRequest 封装更高级的 Hooks。UseRequestProvider,建议自行基于 useRequest 封装高级 Hooks 来代替。pagination 相关属性,建议使用 usePagination 或 useAntdTable 来实现分页能力。loadMore 相关属性,建议使用 useInfiniteScroll 来实现无限加载能力。fetchKey,也就是删除了并行能力。formatResult、initialData、throwOnError。service 不再支持字符或对象。runAsync 和 refreshAsync,原来的 run 不再返回 Promise。onBefore、onFinally 生命周期。runAsync 可以返回正常 Promise。ready 行为升级ahooks v3 全面支持 SSR,相关文档可见《React Hooks & SSR》。
DOM 类 Hooks 支持 target 动态变化,相关文档可见《DOM 类 Hooks 使用规范》
ahooks v3 通过对输入输出函数做特殊处理,尽力帮助大家避免闭包问题。
所有的输出函数,地址是不会变化的。
const [state, setState] = React.useState();
大家熟知的React.useState返回的 setState 函数,地址是不会变化的。
v3 所有 Hooks 返回的函数,也有和 setState 一样的特性,地址不会变化。
const [state, { toggle }] = useToggle();
比如 useToggle 返回的 toggle 函数,地址就是永远固定的。
所有的输入函数,永远使用最新的一份。
对于接收的函数,v3 会做一次特殊处理,保证每次调用的函数永远是最新的。
const [state, setState] = useState();
useInterval(() => {
console.log(state);
}, 1000);
比如以上示例,useInterval 调用的函数永远是最新的。
相关文档可见《ahooks 输入输出函数处理规范》。
v3 修复了在严格模式下的一些问题。参考《React Hooks & strict mode》
v3 修复了在 react-refresh(HMR)模式下的一些问题。参考《React Hooks & react-refresh(HMR)》
useBoolean
toggle 不再接收参数setuseToggle
toggle 不再接收参数setuseSet
has 方法,使用 state.has 代替useCookieState
setState(null) 删除 Cookie,请使用 setState(undefined) 或 setState() 替代useCountDown
setTargetDate 返回值,可以动态改变 options.targetDate 实现相同效果useLocalStorageState / useSessionStorageState
defaultValue 变为了 Options,使用 options.defaultValue 代替options.serializer 和 options.deserializer,支持自定义序列法方法useDynamicList
sortForm 改名为 sortListuseDrag & useDrop
useExternal
useFullscreen
useVirtualList
options.itemHeight 函数型参数增加了 data 参数useInViewport
useScroll
{ left?: number, top?: number } 改为 { left: number, top: number } | undefineduseSize
{ width?: number, height?: number } 改为 { width: number, height: number } | undefineduseKeyPress
useAntdTable
options.formatResultuseFusionTable
options.formatResultusePersistFn 更名为 useMemoizedFn
废弃了 1.0 遗留的 useControlledValue 命名,请使用 useControllableValue 代替
useUrlState
useControllableValue
更多其它优化
新版 useRequest 只做 Promise 管理的底层能力,更多高级能力可以基于 useRequest 封装高级 Hooks 来支持。
options.formatResult 删除,期望 service 返回最终格式的数据。比如:const { data } = useRequest(async () => {
const result = await getData();
return result.data;
});
原 options.fetchKey 并行模式删除,期望将每个请求动作和 UI 封装为一个组件,而不是把所有请求都放到父级。
原 options.initialData 删除,可以这样做
const { data = initialData } = useRequest(getData);
service 不再支持字符或对象。期望基于 useReqeust 封装高级 Hooks 来支持。比如:const useCustomHooks = (pathname, options) => {
return useRequest(() => {
return axios(pathname);
}, options);
};