美文网首页js css html
组合函数实现代码复用

组合函数实现代码复用

作者: alue | 来源:发表于2023-01-14 19:02 被阅读0次

最近在 Vue.js 项目重构中,体会到了 Composable 的代码复用价值. 这里梳理一下.

业务中, 很常见的 CRUD 需求主要有如下通用的构成:

界面

  1. 数据列表
  2. 新增按钮
  3. 每行数据对应 1 个编辑按钮
  4. 每行数据对应 1 个删除按钮

功能

  1. 页面加载时, 获取列表数据(带有 loading 指示)
  2. 点击新增或者编辑按钮时, 能够弹出表单.
  3. 修改相应的表单后, 列表数据需要更新.
  4. 点击删除按钮, 能够给出数据删除提醒.
  5. 删除之后, 列表数据随之更新.
  6. 如果数据操作出现异常,给出弹窗反馈.
  7. 数据上传成功, 给出弹窗反馈.

之前每开发一个功能时, 上面的过程几乎都要走一遍, 虽然难度不大, 但过程枯燥,容易遗漏犯错. 而采用 Composable 之后, 上面的逻辑完全可以抽离出来,形成一个组合函数 useList

import { onMounted, ref, watch } from "vue";  
import { Dialog, Notify } from "quasar";

export function useList(actions) {  
  const loading = ref(false);  
  const list = ref([]);  
  const formVisible = ref(false);  
  
  const openForm = () => {  
    formVisible.value = true;  
  };  
  
  const loadData = async () => {  
    loading.value = true;  
    try {  
      list.value = await actions.getList();  
    } catch (error) {  
      console.error(error);  
    } finally {  
      loading.value = false;  
    }  
  };  
  
  const deleteFn = async (id) => {  
    Dialog.create({  
      title: "提醒",  
      message: "确认删除?",  
      ok: {  
        unelevated: true,  
        color: "negative",  
      },  
      cancel: {  
        flat: true,  
        color: "black",  
      },  
      persistent: true,  
    }).onOk(async () => {  
      try {  
        await actions.deleteItem(id);  
        Notify.create({  
          message: "删除成功",  
          type: "positive",  
        });  
        const index = list.value.findIndex((el) => el.id === id);  
        if (index !== -1) {  
          list.value.splice(index, 1);  
        }  
      } catch (error) {  
        Notify.create({  
          message: "删除失败",  
          type: "negative",  
        });  
      }  
    });  
  };  
  
  const updateList = async (data) => {  
    const index = list.value.findIndex((el) => el?.id === data.id);  
    if (index !== -1) {  
      list.value.splice(index, 1, data);  
    } else {  
      // 新增  
      list.value.splice(0, 0, data);  
    }  
  };  
  
  onMounted(() => loadData());  
  
  return {  
    loading,  
    list,  
    formVisible,  
    openForm,  
    deleteFn,  
    updateList,  
  };  
}

应用

面对一个新的CRUD业务时, 只用定义好 actions 参数, 然后调用 useList 即可获得页面所需要的全部数据.

// actions 参数给出了获取列表,删除列表的方法.
const actions = {  
  getList: async () => await api.get(some_url),  
  deleteItem: async (id) => await api.delete(some_url + id + "/"),  
};
// 调用组合函数
const {  
  loading,  
  formVisible,  
  list,  
  openForm,  
  deleteFn,  
  updateList,  
} = useList(actions);

借助 Quasar 实现组件视图模板:

<q-card>  
  <q-table  
    :data="list"  
    :loading="loading"  
  >  
    <template v-slot:top>  
      <q-btn  
        :disable="loading"  
        label="新增"  
        @click="openForm"  
      />  
    </template>   
    <template v-slot:body-cell-id="props">  
      <q-td :props="props">  
        <q-btn label="编辑" @click="openForm(props.row)" />  
        <q-btn label="删除" @click="deleteFn(props.row.id)"/>  
      </q-td>  
    </template>  
  </q-table>  
  <meeting-assign-form-modal 
      v-model="formVisible" 
      @update="updateList" />  
</q-card>

短短几十行代码, 就能实现一个功能完备的列表页.

可以按照此逻辑, 编写自己的useForm组合函数, 实现表单页面的通用逻辑抽离. 这样开发效率将大大提高. 而且, 令人兴奋的是, 不仅仅是Vue.js 3支持组合函数, Vue.js 2.7也同样支持上述写法.

相关文章

  • 组合函数实现代码复用

    最近在 Vue.js 项目重构中,体会到了 Composable 的代码复用价值. 这里梳理一下. 业务中, 很...

  • 2019-01-04函数基础

    函数基础 一、函数是什么? 1,函数是对实现某一功能的代码的封装2,函数可以实现代码的复用,从而减少代码的重复编写...

  • 函数、Function

    函数-->作为javascript的基本模块单元,用于代码复用、信息隐藏和组合调用 函数对象、Function o...

  • Vue3 Composition API初探

    Composition API Composition API字面意思是组合API,它是为了实现基于函数的逻辑复用...

  • [Flutter]flutter基础之Dart语言基础(三)

    一、函数 函数用于将代码结构化,将复杂的问题简单化,实现根据功能拆分程序,使得代码可以实现复用。 Dart 中的入...

  • 2018-08-29 day8

    1.函数 函数的定义:函数就是对实现某一特定功能的代码段封装 函数的意义:提高代码的复用度,让程序更简洁,封装没有...

  • 《java编程思想》第七章复用类

    Java实现代码的复用主要有三种方式,一,组合,在新类中产生现有类的对象,复用了现有代码的功能;二,继承,采用现有...

  • Python-函数

    ​ 函数是一种可以复用代码,把大型代码拆分成多段代码,实现功能分离,达到模块化的效果。 ​ 对于函数主要有...

  • Python基础-11函数

    11.函数     函数在Python占有非常重要的地位,可以实现代码复用,增强代码可读性等等。在Python在函...

  • 函数入门

    函数 作用:复用代码(可复用多行代码) 函数的定义: 函数的调用:函数名加一个括号表示调用 函数名();例如:fn...

网友评论

    本文标题:组合函数实现代码复用

    本文链接:https://www.haomeiwen.com/subject/nbngcdtx.html