@fallen-zero/use
Version:
62 lines (59 loc) • 1.59 kB
TypeScript
import { Ref } from 'vue';
/** 下拉滚动加载列表
* @param api 请求方法
* @param [params] 请求参数, 默认
* @param {object} [options]
* @param {boolean} [options.immediate] 是否立即执行
* @example
*
const listApi = ({ page, limit }: { page: number; limit: number }) => {
return new Promise<{
list: number[];
total: number;
}>((resolve) => {
setTimeout(() => {
if (page <= 5) {
resolve({
list: Array(limit)
.fill(0)
.map((_, index) => (page - 1) * limit + index + 1),
total: 0,
});
return;
}
resolve({
list: Array(limit - 3)
.fill(0)
.map((_, index) => (page - 1) * limit + index + 1),
total: 0,
});
}, 500);
});
};
const { list, loading, finished, refreshing, onLoad, reset } = useApiList(listApi);
*/
export declare const useApiList: <T, P extends {
page?: number | undefined;
limit?: number | undefined;
}>(api: (params: P) => Promise<{
list: T[];
total: number;
}>, params?: P | undefined, { immediate }?: {
immediate?: boolean | undefined;
}) => {
list: Ref<T[]>;
/** 总数 */
total: Ref<number>;
/** 加载状态 */
loading: Ref<boolean>;
/** 是否请求结束 */
finished: Ref<boolean>;
/** 是否正在刷新 */
refreshing: Ref<boolean>;
/** 修改请求参数 */
setParams: (_params: Partial<Omit<P, "page">>) => Promise<void>;
/** 加载方法 */
onLoad: () => Promise<void>;
/** 重置 */
reset: () => Promise<void>;
};