linkmore-design
Version:
🌈 🚀lm组件库。🚀
73 lines (68 loc) • 1.64 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = require("react");
const usePagination = (service, options = {}) => {
const {
defaultPageSize = 20,
defaultCurrent = 1,
refreshDeps = [],
...rest
} = options;
const [result, setResult] = (0, _react.useState)({
loading: false,
data: {
pageIndex: defaultCurrent,
pageSize: defaultPageSize
}
});
const getRequest = (0, _react.useCallback)(async (c = defaultCurrent, p = defaultPageSize) => {
setResult(old => ({
...old,
loading: true
}));
const res = await service({
current: c,
pageSize: p,
...rest
});
setResult(old => ({
...old,
...res,
loading: false
}));
}, [service, ...refreshDeps]);
const {
pageIndex = 1,
pageSize = defaultPageSize,
totalCount = 0
} = result?.data || {};
// 总页数
const totalPage = (0, _react.useMemo)(() => Math.ceil(totalCount / pageSize), [pageSize, totalCount]);
// 分页改变触发
const onChange = (c, p) => getRequest(c, p);
// 手动重取数据, 不传入数据则触发刷新
const refetch = ({
current: c = pageIndex,
pageSize: p = pageSize
}) => getRequest(c, p);
// 初始化获取数据
(0, _react.useEffect)(() => {
getRequest(defaultCurrent, defaultPageSize);
}, [getRequest]);
return {
...result,
refetch,
pagination: {
current: pageIndex,
pageSize,
total: totalCount,
totalPage,
onChange
}
};
};
var _default = usePagination;
exports.default = _default;
;