使用vue3的hooks封装一个获取表格的方法

起初发现,我们业务中获取表格的方法都是一样的,不如抽取出来,封装一个,不然每个页面都是一样的逻辑。

1.创建一个公共的js文件

//如果自己的组件中没有全局引入的话,需要引入以下的代码:
import {reactive, toRefs,} from 'vue'
import { debounce } from 'lodash'
import { ElMessage } from 'element-plus'

//一般命名前缀是使用use
export const useTable = (apiUrl:any,searchParmas:any)=>{
    // 首先定义存放数据的变量
    const state  = reactive({
        loading: false, //加载状态
        tableData:[], //存放表格数据
        listQuery:reactive({ ...searchParmas, page: 1, limit: 20 }),
    })

    // 定义获取表格数据的方法
    const loadList = ()=>{
        state.loading = true
        const params ={
            ...state.listQuery,
            ...searchParmas
        }
        try {
            state.tableData = await apiUrl(params)
        } finally{
            state.loading = false
            state.tableData = []
        }
    }

    //分页切换方法
    const pageChange = (val:number)=>{
        state.listQuery.page = val
        loadList()
    }

    //分页size切换方法
    const sizeChange = (val:number)=>{
        state.listQuery.limit = val
        loadList()
    }
    
    // 定义搜索方法,使用防抖lodash
    const searchData = debounce((loadList:any) => {
        state.listQuery.page = 1
        loadList();
      }, 500)

    //重置搜索条件
    const resetSearch = ()=>{
        state.listQuery = reactive({ ...searchParmas, page: 1, limit: 20 })
        loadList()
    }

      return {
        ...toRefs(state),
        loadList,
        pageChange,
        sizeChange,
        searchData,
        resetSearch
      };
}

2.然后在对应的页面引入刚刚封装的文件

import { useTable } from '@/hooks/useTable';
// 引入接口Api
import { getCusList } from '@/api/modules/customer'

const searchParam = reactive({ keyword: '' })
// 使用自定义table hooks
const {
  loadList, pageChange, sizeChange, searchData, resetSearch, loading,tableData,listQuery
} = useTable(getCusList, searchParam);
onMounted(()=>{
    loadList()

})

Vue3中,我们可以使用Composition API来封装组件和自定义Hooks函数。引用中提到的文章《浅谈:为啥vue和react都选择了Hooks🏂?》给出了对Hook的介绍和解释。通过使用Hooks,我们可以更好地解决在组件封装过程中遇到的问题。 在Vue3中,我们可以使用Composition API来封装我们的组件。引用中提到的JeecgBoot—Vue3版前端源码是一个使用Vue3.0和Ant-Design-Vue等新技术方案进行开发的项目。它采用了Composition API来进行二次封装组件、utils、hooks等功能的实现。 使用Composition API封装Hooks函数可以实现代码的复用。引用中提到,Composition API相比Vue2中的mixin更清晰地展示了Hooks函数的来源和功能。通过自定义封装Hooks函数,我们可以将常用的逻辑进行抽离,并在多个组件中进行复用。 因此,通过使用Composition API和自定义Hooks函数,我们可以在Vue3中进行组件的封装和复用。这样可以更好地解决在合作开发中每个人封装习惯不同的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue3 hooks 组件封装](https://blog.csdn.net/longxiaobao123/article/details/128784119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [JeecgBoot平台前端Vue3源码](https://download.csdn.net/download/dcs_pk/88099139)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Vue3 Hooks函数使用封装思想](https://blog.csdn.net/m0_46846526/article/details/131252270)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值