What aspects of composition should I focus on for better writing skills?

2026-04-27 16:231阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1486个文字,预计阅读时间需要6分钟。

What aspects of composition should I focus on for better writing skills?

目录+前序+hook的使用场景+useGetJobList+共同+思路历程+心得+utils和hook的区别+总结+前序+近期公司的新项目一个小程序,想直接尝试Vue3开发项目,鉴于自己的驱动力不行,学的零零碎碎的。

目录
  • 前序
  • hook的场景
  • useGetJobList
    • 共同
    • 思路历程
    • 心得
  • utils 和 hook 的区别
    • 总结

      前序

      近期公司的新项目一个小程序,一直想尝试 Vue3 开发项目,苦于自己的驱动力不行,学的零零碎碎的。因此小程序我直接跟项目组长说我要使用 uniapp 的 Vue3 版进行开发。开发中遇到业务场景相同的,就分装了一个hook 来减少代码,易于维护。

      hook的场景

      这种获取列表的需求很常见吧,在我这个小程序中有3处使用到了获取列表的功能。分别是: 我的收藏、已投递岗位、未投递岗位。

      当然展示岗位的 card 我是分装了一个组件,很简单的业务组件,这里也不会描述。

      假如: 我的收藏、已投递岗位、未投递岗位 都各自获取列表,就会出现重复性的定义以下代码

      const getJobParameter = reactive<paramsType>({ page: 1, pageSize: 10, code: null, releaseJobName: null, }); const jobList = ref([] as Array<jobType>); const total = ref(0); onLoad(() => { getlist(); }); onReachBottom(() => { if (jobList.value.length < total.value) { getJobParameter.page++; getlist(); } }); async function getlist() { const res: any = await fn(getJobParameter); jobList.value = await [...jobList.value, ...res.data.data.dataList]; total.value = res.data.data.total; }

      3个页面都要写上: 定义变量 -> 初始获取 -> 获取的代码判断 -> 底部触发的代码。因此就直接分装了一个 hook。

      useGetJobList

      共同

      import { onLoad, onReachBottom } from '@dcloudio/uni-app'; import { ref, reactive } from 'vue'; import { jobType } from '@/types/job-hunting'; interface paramsType { page: number; pageSize: number; code: string | null; releaseJobName: string | null; } export function useGetJobList(fn) { const getJobParameter = reactive<paramsType>({ page: 1, pageSize: 10, code: null, releaseJobName: null, }); const jobList = ref([] as Array<jobType>); const total = ref(0); onLoad(() => { getlist(); }); onReachBottom(() => { if (jobList.value.length < total.value) { getJobParameter.page++; getlist(); } }); async function getlist() { const res: any = await fn(getJobParameter); jobList.value = await [...jobList.value, ...res.data.data.dataList]; total.value = res.data.data.total; } async function refresh() { getJobParameter.page = 1; jobList.value = []; await getlist(); return true; } return { jobList, refresh: () => refresh(), }; }

      已上代码就是简单的获取到岗位的 list 还未进行操作。

      思路历程

      因为首页有城市的选择、岗位的搜索等功能。

      下面是我开始时的想法(错误):

      我想着要不把 getJobParameter 的参数全部暴露出去,然后对这些参数进行操作,但是内心感觉怪怪的,这样跟不分装好像区别也不大,又思考要不在 useGetJobList 加一个参数用来传递 参数的变化,当然这个也是行不通的。

      后面看了别人分装的 hook。就有了以下代码。

      import { onLoad, onReachBottom } from '@dcloudio/uni-app'; import { ref, reactive } from 'vue'; import { jobType } from '@/types/job-hunting'; interface paramsType { page: number; pageSize: number; code: string | null; releaseJobName: string | null; } export function useGetJobList(fn) { const getJobParameter = reactive<paramsType>({ page: 1, pageSize: 10, code: null, releaseJobName: null, }); const jobList = ref([] as Array<jobType>); const total = ref(0); onLoad(() => { getlist(); }); onReachBottom(() => { if (jobList.value.length < total.value) { getJobParameter.page++; getlist(); } }); async function getlist() { const res: any = await fn(getJobParameter); jobList.value = await [...jobList.value, ...res.data.data.dataList]; total.value = res.data.data.total; } async function refresh() { getJobParameter.page = 1; jobList.value = []; await getlist(); // 这个后面的代表异步了 return true; } function reset () { getJobParameter.page = 1; getJobParameter.code = null; getJobParameter.releaseJobName = null; } function queryList(searchValue: string | null) { reset(); getJobParameter.releaseJobName = searchValue; getlist(); } function codeChange(code: string | null) { reset(); getJobParameter.code = code; getlist(); } return { jobList, queryList: (searchValue: string | null) => queryList(searchValue), codeChange: (code: string | null) => codeChange(code), refresh: () => refresh(), }; }

      这里为 重新定两个函数 分别是 queryList、codeChange,用来搜索和城市code 改变再获取 岗位列表。

      queryList: (searchValue: string | null) => queryList(searchValue), codeChange: (code: string | null) => codeChange(code),

      上面代码还有一个心得,就是在 return 是可以直接把函数写为什么要再分装一个函数出来?

      心得

      • 当定义了一个 hook , 当外部使用想改变 hook 内部的变量,内部写个函数暴露出去,函数的内部是对变量的修改,外部只需要使用暴露函数。这样代码十分的清晰易懂。
      • return 再分装一个函数 是为了后期别人看代码是可以一眼就知道返回哪些是变量,哪些是函数,函数有哪些参数,参数的类型等之类的,不用一个的去查找。

      utils 和 hook 的区别

      之前我一直搞不清楚 hook 和 utils 的区别,我感觉差不多都是分装一个函数出来。

      区别: utils 是一个简单的参数传入,然后返回,返回的变量不具有响应式。没有使用到 Vue 的 reactive、ref等钩子函数, 我认为当你使用了这些钩子函数就可以说它是一个 hook。

      总结

      hook 有点想面向对象的语言的 class, 内部定义的变量,最好自己内部的做处理,只需暴露出一个函数。

      • 当定义了一个 hook , 当外部使用想改变 hook 内部的变量就因此写一个函数暴露出去,进行变量的更改
      • return 再分装一个函数 是为了后期别人看代码是可以一眼就知道返回哪些是变量,哪些是函数,函数有哪些参数,参数的类型等之类的,不用一个的去查找。

      以上就是Composition Api封装业务hook思路示例分享的详细内容,更多关于Composition Api封装hook的资料请关注易盾网络其它相关文章!

      What aspects of composition should I focus on for better writing skills?

      本文共计1486个文字,预计阅读时间需要6分钟。

      What aspects of composition should I focus on for better writing skills?

      目录+前序+hook的使用场景+useGetJobList+共同+思路历程+心得+utils和hook的区别+总结+前序+近期公司的新项目一个小程序,想直接尝试Vue3开发项目,鉴于自己的驱动力不行,学的零零碎碎的。

      目录
      • 前序
      • hook的场景
      • useGetJobList
        • 共同
        • 思路历程
        • 心得
      • utils 和 hook 的区别
        • 总结

          前序

          近期公司的新项目一个小程序,一直想尝试 Vue3 开发项目,苦于自己的驱动力不行,学的零零碎碎的。因此小程序我直接跟项目组长说我要使用 uniapp 的 Vue3 版进行开发。开发中遇到业务场景相同的,就分装了一个hook 来减少代码,易于维护。

          hook的场景

          这种获取列表的需求很常见吧,在我这个小程序中有3处使用到了获取列表的功能。分别是: 我的收藏、已投递岗位、未投递岗位。

          当然展示岗位的 card 我是分装了一个组件,很简单的业务组件,这里也不会描述。

          假如: 我的收藏、已投递岗位、未投递岗位 都各自获取列表,就会出现重复性的定义以下代码

          const getJobParameter = reactive<paramsType>({ page: 1, pageSize: 10, code: null, releaseJobName: null, }); const jobList = ref([] as Array<jobType>); const total = ref(0); onLoad(() => { getlist(); }); onReachBottom(() => { if (jobList.value.length < total.value) { getJobParameter.page++; getlist(); } }); async function getlist() { const res: any = await fn(getJobParameter); jobList.value = await [...jobList.value, ...res.data.data.dataList]; total.value = res.data.data.total; }

          3个页面都要写上: 定义变量 -> 初始获取 -> 获取的代码判断 -> 底部触发的代码。因此就直接分装了一个 hook。

          useGetJobList

          共同

          import { onLoad, onReachBottom } from '@dcloudio/uni-app'; import { ref, reactive } from 'vue'; import { jobType } from '@/types/job-hunting'; interface paramsType { page: number; pageSize: number; code: string | null; releaseJobName: string | null; } export function useGetJobList(fn) { const getJobParameter = reactive<paramsType>({ page: 1, pageSize: 10, code: null, releaseJobName: null, }); const jobList = ref([] as Array<jobType>); const total = ref(0); onLoad(() => { getlist(); }); onReachBottom(() => { if (jobList.value.length < total.value) { getJobParameter.page++; getlist(); } }); async function getlist() { const res: any = await fn(getJobParameter); jobList.value = await [...jobList.value, ...res.data.data.dataList]; total.value = res.data.data.total; } async function refresh() { getJobParameter.page = 1; jobList.value = []; await getlist(); return true; } return { jobList, refresh: () => refresh(), }; }

          已上代码就是简单的获取到岗位的 list 还未进行操作。

          思路历程

          因为首页有城市的选择、岗位的搜索等功能。

          下面是我开始时的想法(错误):

          我想着要不把 getJobParameter 的参数全部暴露出去,然后对这些参数进行操作,但是内心感觉怪怪的,这样跟不分装好像区别也不大,又思考要不在 useGetJobList 加一个参数用来传递 参数的变化,当然这个也是行不通的。

          后面看了别人分装的 hook。就有了以下代码。

          import { onLoad, onReachBottom } from '@dcloudio/uni-app'; import { ref, reactive } from 'vue'; import { jobType } from '@/types/job-hunting'; interface paramsType { page: number; pageSize: number; code: string | null; releaseJobName: string | null; } export function useGetJobList(fn) { const getJobParameter = reactive<paramsType>({ page: 1, pageSize: 10, code: null, releaseJobName: null, }); const jobList = ref([] as Array<jobType>); const total = ref(0); onLoad(() => { getlist(); }); onReachBottom(() => { if (jobList.value.length < total.value) { getJobParameter.page++; getlist(); } }); async function getlist() { const res: any = await fn(getJobParameter); jobList.value = await [...jobList.value, ...res.data.data.dataList]; total.value = res.data.data.total; } async function refresh() { getJobParameter.page = 1; jobList.value = []; await getlist(); // 这个后面的代表异步了 return true; } function reset () { getJobParameter.page = 1; getJobParameter.code = null; getJobParameter.releaseJobName = null; } function queryList(searchValue: string | null) { reset(); getJobParameter.releaseJobName = searchValue; getlist(); } function codeChange(code: string | null) { reset(); getJobParameter.code = code; getlist(); } return { jobList, queryList: (searchValue: string | null) => queryList(searchValue), codeChange: (code: string | null) => codeChange(code), refresh: () => refresh(), }; }

          这里为 重新定两个函数 分别是 queryList、codeChange,用来搜索和城市code 改变再获取 岗位列表。

          queryList: (searchValue: string | null) => queryList(searchValue), codeChange: (code: string | null) => codeChange(code),

          上面代码还有一个心得,就是在 return 是可以直接把函数写为什么要再分装一个函数出来?

          心得

          • 当定义了一个 hook , 当外部使用想改变 hook 内部的变量,内部写个函数暴露出去,函数的内部是对变量的修改,外部只需要使用暴露函数。这样代码十分的清晰易懂。
          • return 再分装一个函数 是为了后期别人看代码是可以一眼就知道返回哪些是变量,哪些是函数,函数有哪些参数,参数的类型等之类的,不用一个的去查找。

          utils 和 hook 的区别

          之前我一直搞不清楚 hook 和 utils 的区别,我感觉差不多都是分装一个函数出来。

          区别: utils 是一个简单的参数传入,然后返回,返回的变量不具有响应式。没有使用到 Vue 的 reactive、ref等钩子函数, 我认为当你使用了这些钩子函数就可以说它是一个 hook。

          总结

          hook 有点想面向对象的语言的 class, 内部定义的变量,最好自己内部的做处理,只需暴露出一个函数。

          • 当定义了一个 hook , 当外部使用想改变 hook 内部的变量就因此写一个函数暴露出去,进行变量的更改
          • return 再分装一个函数 是为了后期别人看代码是可以一眼就知道返回哪些是变量,哪些是函数,函数有哪些参数,参数的类型等之类的,不用一个的去查找。

          以上就是Composition Api封装业务hook思路示例分享的详细内容,更多关于Composition Api封装hook的资料请关注易盾网络其它相关文章!

          What aspects of composition should I focus on for better writing skills?