开发中,我们是否经常遇到以下痛点:
此前端架构优势以及展望如下:
// src/core/openapi/index.ts
// 示例代码
generateService({
// openapi地址
schemaPath: `${appConfig.baseURL}/${urlPath}`,
// 文件生成目录
serversPath: "./src",
// 自定义网络请求函数路径
requestImportStatement: `/// \nimport request from "@request"`,
// 代码组织命名空间, 例如:Api
namespace: "Api",
});
// HelloGet是一个基于axios的promise请求
export async function HelloGet(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: Api.HelloGetParams,
options?: { [key: string]: any },
) {
return request<Api.HelloResp>("/demo-docker/api/v1/hello", {
method: "GET",
params: {
...params,
},
...(options || {}),
});
}
// 自动调用接口获取数据
const name = ref("zhangsan");
const { data, isPending, refetch } = useQuery({
queryKey: ["helloGet", name],
queryFn: () => HelloGet({ name: name.value || "" }),
});
// HelloPost是一个基于axios的promise请求
export async function HelloPost(body: Api.HelloPostParam, options?: { [key: string]: any }) {
return request<Api.HelloResp>("/demo-docker/api/v1/hello", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
data: body,
...(options || {}),
});
}
// 提交编辑数据
const queryClient = useQueryClient();
const userStore = useUserStore();
const { mutate, isPending } = useMutation({
mutationFn: HelloPost,
onSuccess: (res) => {
// 第一种刷新方式:修改store
userStore.updateUserInfo({ name: res.data });
// 第二种刷新方式:通过清除vue-query缓存key
queryClient.invalidateQueries({ queryKey: ["helloGet"] });
},
});
mutate({ name: "lisi" });
点此查看前端架构源码