v3 升级指南
以下是从 alova v2 到 v3 的迁移指南。
- fetch 适配器导入路径变更:
// v2
import GlobalFetch from 'alova/GlobalFetch';
// v3
import adapterFetch from 'alova/fetch';
- useRequest/useWatcher/useFetcher 等 hook 导入路径变更:
// v2
import { useRequest } from 'alova';
import { usePagination, useForm } from '@alova/scene-[vue/react/svelte]';
// v3
import { useRequest, usePagination, useForm } from 'alova/client';
- 缓存模式重新设计,placeholder 模式被移除,可使用 initialData 函数实现相同效果:
// v2
const { data } = useRequest(Getter, {
placeholder: true
});
// v3
const { data } = useRequest(Getter, {
initialData() {
// 设置上一次的响应数据
const storedData = localStorage.getItem('placeholder-data');
return JSON.parse(storedData || '{}');
// 也使用alova的存储适配器
// return alovaInst.l2cache.get('placeholder-data');
}
}).onSuccess(({ data, method }) => {
// 保存响应数据
localStorage.setItem('placeholder-data', JSON.stringify(data));
// 也使用alova的存储适配器
alovaInst.l2cache.set('placeholder-data', data);
});
- 缓存操作函数变为异步,并支持指定缓存级别:
// v2
setCache(methodInstance, data);
const cache = queryCache(methodInstance);
invalidateCache();
// v3
await setCache(methodInstance, data, { policy: 'all' });
const cache = queryCache(methodInstance);
await invalidateCache(methodInstance);
- method 快照匹配器使用方式变更:
// v2
invalidateCache('method-name');
// v3
const methodSnapshots = alovaInst.snapshots.match('method-name');
invalidateCache(methodSnapshots);
- useWatcher 的
sendable选项被移除,使用middleware替代:
// v2
useWatcher(() => method, [xxx], { sendable: () => sendable });
// v3
useWatcher(() => method, [xxx], {
async middleware(_, next) {
if (sendable) {
return next();
}
}
});
- method 的
enableDownload/enableUpload选项被移除,改为自动判断:
// v2
alova.Get('/api/file', {
enableDownload: true
});
// v3
alova.Get('/api/file');
- createAlova 中
responsed替代responded:
// v2
createAlova({
responsed() {
// ...
}
});
// v3
createAlova({
responded() {
// ...
}
});
errorLogger参数被移除,错误处理逻辑变更:
// v2
createAlova({
errorLogger: true
});
// v3
// 不再需要设置,自动处理错误日志
updateState不再支持 method 匹配器,onMatch 钩子被移除:
// v2
updateState('method-name', newState, {
onMatch: () => {}
});
// v3
const methodSnapshots = alovaInst.snapshots.match('method-name');
updateState(methodSnapshots, newState);
- getMethodKey 函数导入方式变更:
// v2
import { getMethodKey } from 'alova';
// v3
import { key } from '@alova/shared/function';
- middleware 中 context.update 函数和装饰函数被移除:
// v2
middleware(({ update }) => {
update({ loading: true });
});
// v3
middleware(({ proxyStates }) => {
proxyStates.loading.v = true;
});
- @alova/vue-options 中
mapWatcher被移除:
// v2
export default {
watch: mapWatcher({
'testRequest.data'() {
// ...
}
})
}
// v3
export default {
watch: {
'testRequest.data'() {
// ...
}
}
}
- usePagination 在 React 中使用方式变更:
// v2
const {
page: [page, setPage],
pageSize: [pageSize, setPageSize]
} = usePagination(/*...*/);
setPage(page + 1);
// v3
const { page, pageSize, update } = usePagination(/*...*/);
update({ page: page + 1 });
- useForm 不再支持直接传入 id 返回缓存的 hookReturns:
// v2
const states = useForm('form-id');
// v3
const { states } = useForm(formData => methodHandler(formData), {
id: 'form-id'
});
- SilentMethod 相关方法变为异步:
// v2
silentMethod.replace(newSilentMethod);
// v3
await silentMethod.replace(newSilentMethod);
- accessAction 新增
silent参数,没有匹配到时不再抛出错误。
// v2
accessAction('method-name', ({ send }) => {
send();
});
// v3
accessAction(
'method-name',
({ send }) => {
send();
},
true
);
method.__key__简化为 method.key:
// v2
method.__key__ = 'custom-key';
// v3
method.key = 'custom-key';
method.transformData简化为 method.transform:
// v2
alova.Get('/api/profile', {
transformData(data) {
return data.detail;
}
});
// v3
alova.Get('/api/profile', {
transform(data) {
return data.detail;
}
});
- method.localCache 更改为 method.cacheFor:
// v2
alova.Get('/api/profile', {
localCache: 1000 * 60 * 60
});
// v3
alova.Get('/api/profile', {
cacheFor: 1000 * 60 * 60
});