⚗️ useList
useList hook主要为列表页面提供:API请求、参数绑定、重置、查询及数据处理能力,兼容分页及非分页两种通用后台数据返回形式。
使用方式
🔊🔊🔊说明
以下代码示例为基础参考示例,各项目组成员请依照个人风格自行组织template代码内容。
1.分页模式(常用模式)
js
// @/api/demo.js
import request from "@/service/index.js"
export function getDemoList(params = {}) {
return request({
url: "demo/list",
method: "post",
params
})
}
vue
<template>
<div class="demo-list" v-loading="loading">
<!--查询表单-->
<el-form :inline="true">
<el-form-item>
<el-input v-model="queryForm.searchText" placeholder="请输入" />
</el-form-item>
<el-form-item>
<el-button @click="resetSearch">重置</el-button>
<el-button @click="searchList">查询</el-button>
</el-form-item>
</el-form>
<!--列表-->
<vxe-table :data="tableData">
<vxe-column type="seq" title="序号" />
<vxe-column field="a" title="字段a" />
<vxe-column field="b" title="字段b" />
</vxe-table>
<!--分页-->
<el-pagination
v-model:current-page="queryForm.pageNum"
v-model:page-size="queryForm.pageSize"
:page-sizes="[10, 20, 30, 40]"
layout="total, sizes, prev, pager, next, jumper"
:total="totalNum"
@size-change="getList"
@current-change="getList"
/>
</div>
</template>
<script setup>
import { useList } from "@hooks/useList.js"
import { getDemoList } from "@/api/demo.js"
const { tableData, totalNum, queryForm, loading, resetSearch, searchList, getList } = useList(
getDemoList,
{
searchText: undefined
pageNum: 1,
pageSize: 10
}
)
</script>
2.非分页模式
非分页模式下仅需要传递
pagination: false
即可
vue
<template>...</template>
<script setup>
import { useList } from "@hooks/useList.js"
import { getDemoList } from "@/api/demo.js"
const { tableData, queryForm } = useList(
getDemoList,
{ searchText: undefined },
{ pagination: false } //[!code highlight]
)
</script>
3.参数过滤
在一些特殊场景下需要保证重置操作时某参数固定不变,此时添加过滤项则是非常有效的手段。使用也非常简单,只需添加
exclude
配置即可。
vue
<template>...</template>
<script setup>
import { useList } from "@hooks/useList.js"
import { getDemoList } from "@/api/demo.js"
const { tableData, queryForm } = useList(
getDemoList,
{ queryType: 1 }, //[!code highlight]
{ exclude: ["queryType"] } //[!code highlight]
)
</script>
4.数据处理
有些场景需要对请求数据做一些处理,例如整合、过滤等,此时可以选择传入回调函数来达成这一目的。该函数接受一个list集合作为参数,不会对其他功能产生破坏性影响。
vue
<template>...</template>
<script setup>
import { useList } from "@hooks/useList.js"
import { getDemoList } from "@/api/demo.js"
const { tableData, queryForm } = useList(
getDemoList,
{ pageNum: 1, pageSize: 12 },
{
listHandler: records => {
return records.map(item => {
return {
id: item.id,
name: item.name
}
})
}
}
)
</script>
5.请求回调
为支持列表请求后续事件处理,提供onSuccess、onError两个回调函数以供使用。
vue
<template>...</template>
<script setup>
import { useList } from "@hooks/useList.js"
import { getDemoList } from "@/api/demo.js"
const { tableData, queryForm } = useList(
getDemoList,
{ pageNum: 1, pageSize: 12 },
{
onSuccess: () => {
//请求成功的后续逻辑
},
onError: () => {
//请求失败的后续逻辑
}
}
)
</script>
参数说明
options参数详情
Expose变量说明
🔊🔊🔊以下变量或方法均可按需解构