vue-use-query
Version:
vue use query
41 lines (40 loc) • 1.66 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import { onMounted, onUnmounted, reactive, watchEffect, toRefs } from 'vue';
import { noop, parseMutationArgs } from '../core/utils';
import { MutationObserver } from '../core/mutationObserver';
import { useQueryClient } from './QueryClientProvider';
export function useMutation(arg1, arg2, arg3) {
var options = parseMutationArgs(arg1, arg2, arg3);
var queryClient = useQueryClient();
var observer = new MutationObserver(queryClient, options);
watchEffect(function () {
var options = parseMutationArgs(arg1, arg2, arg3);
observer.setOptions(options);
});
var currentResult = reactive(observer.getCurrentResult());
// 订阅数据的变化
var unsubscribe;
onMounted(function () {
unsubscribe = observer.subscribe(function (res) {
Object.assign(currentResult, res);
});
});
onUnmounted(function () {
unsubscribe === null || unsubscribe === void 0 ? void 0 : unsubscribe();
});
// 突变函数
var mutate = function (variables, mutateOptions) {
observer.mutate(variables, mutateOptions).catch(noop);
};
return __assign(__assign({}, toRefs(currentResult)), { mutate: mutate, mutateAsync: currentResult.mutate });
}