UNPKG

@td-design/rn-hooks

Version:

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

54 lines (51 loc) 2.68 kB
import { __rest, __assign, __spreadArray, __read } from '../_virtual/_tslib.js'; import useCreation from '../useCreation/index.js'; import useLatest from '../useLatest/index.js'; import useMemoizedFn from '../useMemoizedFn/index.js'; import useMount from '../useMount/index.js'; import useUnmount from '../useUnmount/index.js'; import useUpdate from '../useUpdate/index.js'; import Fetch from './Fetch.js'; function useRequestImpl(service, options, plugins) { if (options === void 0) { options = {}; } if (plugins === void 0) { plugins = []; } var _a = options.manual, manual = _a === void 0 ? false : _a, rest = __rest(options, ["manual"]); if (__DEV__) { if (options.defaultParams && !Array.isArray(options.defaultParams)) { console.warn("expected defaultParams is array, got ".concat(typeof options.defaultParams)); } } var fetchOptions = __assign({ manual: manual }, rest); var serviceRef = useLatest(service); var forceUpdate = useUpdate(); var fetchInstance = useCreation(function () { var initState = plugins.map(function (p) { var _a; return (_a = p === null || p === void 0 ? void 0 : p.onInit) === null || _a === void 0 ? void 0 : _a.call(p, fetchOptions); }).filter(Boolean); return new Fetch(serviceRef, fetchOptions, forceUpdate, Object.assign.apply(Object, __spreadArray([{}], __read(initState), false))); }, []); fetchInstance.options = fetchOptions; fetchInstance.pluginImpls = plugins.map(function (plugin) { return plugin(fetchInstance, fetchOptions); }); useMount(function () { if (!manual) { // useCachePlugin can set fetchInstance.state.params from cache when init var params = fetchInstance.state.params || options.defaultParams || []; // @ts-ignore fetchInstance.run.apply(fetchInstance, __spreadArray([], __read(params), false)); } }); useUnmount(function () { fetchInstance.cancel(); }); return { loading: fetchInstance.state.loading, data: fetchInstance.state.data, error: fetchInstance.state.error, params: fetchInstance.state.params || [], cancel: useMemoizedFn(fetchInstance.cancel.bind(fetchInstance)), refresh: useMemoizedFn(fetchInstance.refresh.bind(fetchInstance)), refreshAsync: useMemoizedFn(fetchInstance.refreshAsync.bind(fetchInstance)), run: useMemoizedFn(fetchInstance.run.bind(fetchInstance)), runAsync: useMemoizedFn(fetchInstance.runAsync.bind(fetchInstance)), mutate: useMemoizedFn(fetchInstance.mutate.bind(fetchInstance)), }; } export { useRequestImpl as default };