useRequest.js 816 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { ref } from 'vue';
  2. export const useRequest = (apiFn, options = {}) => {
  3. const data = ref(null);
  4. const loading = ref(false);
  5. const error = ref(null);
  6. // 执行请求
  7. const execute = async (params = {}) => {
  8. loading.value = true;
  9. error.value = null;
  10. try {
  11. const result = await apiFn(params);
  12. data.value = result;
  13. return result;
  14. } catch (err) {
  15. error.value = err;
  16. throw err;
  17. } finally {
  18. loading.value = false;
  19. }
  20. };
  21. // 立即执行请求
  22. if (options.immediate !== false) {
  23. execute(options.initialParams || {});
  24. }
  25. const refresh = (newParams) => {
  26. return execute(newParams || options.initialParams || {});
  27. };
  28. return {
  29. data,
  30. loading,
  31. error,
  32. execute,
  33. // 重新请求
  34. refresh,
  35. };
  36. };