@taro-hooks/use-request
Version:
useRequest hook for Taro
57 lines • 1.77 kB
JavaScript
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;