UNPKG

@td-design/rn-hooks

Version:

从ahooks里面抽取的一些在rn项目里可以使用的hooks。提高开发效率

81 lines (78 loc) 3.5 kB
import { __read, __awaiter, __generator, __spreadArray, __assign } from '../_virtual/_tslib.js'; import useMemoizedFn from '../useMemoizedFn/index.js'; import useRequest from '../useRequest/index.js'; import useSafeState from '../useSafeState/index.js'; import useUpdateEffect from '../useUpdateEffect/index.js'; var INITIAL_PAGE = 1; var INITIAL_PAGE_SIZE = 10; function useInfiniteScroll(service, options) { var _this = this; var _a = options || {}, _b = _a.manual, manual = _b === void 0 ? false : _b, _c = _a.refreshDeps, refreshDeps = _c === void 0 ? [] : _c, onBefore = _a.onBefore, onSuccess = _a.onSuccess, onError = _a.onError, onFinally = _a.onFinally; var _d = __read(useSafeState(), 2), data = _d[0], setData = _d[1]; var _e = __read(useSafeState(false), 2), loadingMore = _e[0], setLoadingMore = _e[1]; var _f = __read(useSafeState(false), 2), noMoreData = _f[0], setNoMoreData = _f[1]; var _g = useRequest(function (lastData) { return __awaiter(_this, void 0, void 0, function () { var currentData; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, service(lastData ? { page: lastData.page + 1, pageSize: lastData.pageSize, } : { page: INITIAL_PAGE, pageSize: INITIAL_PAGE_SIZE, })]; case 1: currentData = _a.sent(); if (!currentData) { setNoMoreData(true); return [2 /*return*/, currentData]; } setNoMoreData(currentData.page * currentData.pageSize >= currentData.total); if (!lastData) { setData(__assign(__assign({}, currentData), { list: __spreadArray([], __read((currentData.list || [])), false) })); } else { setData(__assign(__assign({}, currentData), { list: __spreadArray(__spreadArray([], __read((lastData.list || [])), false), __read((currentData.list || [])), false) })); } return [2 /*return*/, currentData]; } }); }); }, { manual: manual, onBefore: onBefore, onSuccess: onSuccess, onError: onError, onFinally: function (_, d, e) { setLoadingMore(false); onFinally === null || onFinally === void 0 ? void 0 : onFinally(d, e); }, }), loading = _g.loading, error = _g.error, run = _g.run, runAsync = _g.runAsync, cancel = _g.cancel; var loadMore = useMemoizedFn(function () { if (noMoreData) return; setLoadingMore(true); return run(data); }); var refresh = useMemoizedFn(function () { setLoadingMore(false); return runAsync(); }); useUpdateEffect(function () { run(); }, __spreadArray([], __read(refreshDeps), false)); return { data: (data === null || data === void 0 ? void 0 : data.list) || [], loading: loading, loadingMore: loadingMore, noMoreData: noMoreData, error: error, loadMore: loadMore, refresh: refresh, cancel: cancel, mutate: setData, }; } export { useInfiniteScroll as default };