UNPKG

@taro-hooks/use-request

Version:
57 lines 1.77 kB
import { useRef } from '@taro-hooks/core'; import { useUpdateEffect } from '@taro-hooks/ahooks'; import { escapeState, FRAMEWORK } from '@taro-hooks/shared'; // support refreshDeps & ready var useAutoRunPlugin = function useAutoRunPlugin(fetchInstance, _ref) { var manual = _ref.manual, _ref$ready = _ref.ready, ready = _ref$ready === void 0 ? true : _ref$ready, _ref$defaultParams = _ref.defaultParams, defaultParams = _ref$defaultParams === void 0 ? [] : _ref$defaultParams, _ref$refreshDeps = _ref.refreshDeps, refreshDeps = _ref$refreshDeps === void 0 ? [] : _ref$refreshDeps, refreshDepsAction = _ref.refreshDepsAction; var hasAutoRun = useRef(false); hasAutoRun.current = false; useUpdateEffect(function () { if (!manual && escapeState(ready)) { hasAutoRun.current = true; fetchInstance.run.apply(fetchInstance, defaultParams); } }, [ready]); useUpdateEffect(function () { if (hasAutoRun.current) { return; } if (!manual) { hasAutoRun.current = true; if (refreshDepsAction) { refreshDepsAction(); } else { // due to vue not run every time for plugins. so remark hasAutoRun be folse fetchInstance.refresh(); if (FRAMEWORK === 'vue') { hasAutoRun.current = false; } } } }, [].concat(refreshDeps)); return { onBefore: function onBefore() { if (!escapeState(ready)) { return { stopNow: true }; } } }; }; useAutoRunPlugin.onInit = function (_ref2) { var _ref2$ready = _ref2.ready, ready = _ref2$ready === void 0 ? true : _ref2$ready, manual = _ref2.manual; return { loading: !manual && escapeState(ready) }; }; export default useAutoRunPlugin;