成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Composition Api封裝業(yè)務(wù)hook思路示例分享

3403771864 / 631人閱讀

  在近期的工作中有些知識總結(jié)分享就是使用 uniapp 的 Vue3 版進行開發(fā)。這樣可以在開發(fā)中遇到業(yè)務(wù)場景相同的,就分裝了一個hook 來減少代碼,易于維護。

  hook的場景

1.jpg

  上圖中已經(jīng)很詳細(xì)為我們展示3處使用到了獲取列表的功能。分別是: 我的收藏、已投遞崗位、未投遞崗位?,F(xiàn)在我們就來詳細(xì)說說。

  假如: 我的收藏、已投遞崗位、未投遞崗位 都各自獲取列表,就會出現(xiàn)重復(fù)性的定義以下代碼

  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個頁面都要寫上: 定義變量 -> 初始獲取 -> 獲取的代碼判斷 -> 底部觸發(fā)的代碼。因此就直接分裝了一個 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 還未進行操作。

  總結(jié)思路,

  首頁有城市的選擇、崗位的搜索等功能。

  我在這里有一些錯誤的想法,也可以分享給大家。

  就是在getJobParameter 的參數(shù)全部暴露出去,再對這些參數(shù)進行操作,你是否也感覺這樣跟不分裝好像區(qū)別也不大,又思考要不在 useGetJobList 加一個參數(shù)用來傳遞 參數(shù)的變化,這條路也不通。那要怎么辦?

  后面看了別人分裝的 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(),
  };
  }

  這里為 重新定兩個函數(shù) 分別是 queryList、codeChange,用來搜索和城市code 改變再獲取 崗位列表。

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

  在寫上面代碼過程中我有一個疑問就是在 return 是可以直接把函數(shù)寫為什么要再分裝一個函數(shù)出來?

  緣由

  我們知道,在定義了一個 hook , 當(dāng)外部使用想改變 hook 內(nèi)部的變量,內(nèi)部寫個函數(shù)暴露出去,函數(shù)的內(nèi)部是對變量的修改,外部只需要使用暴露函數(shù)。這樣代碼十分的清晰易懂。

  這時候return 再分裝一個函數(shù) 是為了后期別人看代碼是可以一眼就知道返回哪些是變量,哪些是函數(shù),函數(shù)有哪些參數(shù),參數(shù)的類型等之類的,不用一個的去查找。

  utils 和 hook 的區(qū)別

  之前我一直搞不清楚 hook 和 utils 的區(qū)別,我感覺差不多都是分裝一個函數(shù)出來。

  區(qū)別: utils 是一個簡單的參數(shù)傳入,然后返回,返回的變量不具有響應(yīng)式。沒有使用到 Vue 的 reactive、ref等鉤子函數(shù), 我認(rèn)為當(dāng)你使用了這些鉤子函數(shù)就可以說它是一個 hook。

  總結(jié)小tips

  先說說hook ,它有點想面向?qū)ο蟮恼Z言的 class, 內(nèi)部定義的變量,這樣可以內(nèi)部解決,僅僅只需暴露出一個函數(shù)。

  當(dāng)定義了一個 hook , 當(dāng)外部使用想改變 hook 內(nèi)部的變量就因此寫一個函數(shù)暴露出去,進行變量的更改

  在說回return ,當(dāng)再分裝一個函數(shù),就只看得見數(shù)據(jù),這不是很好嘛。


文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/128234.html

相關(guān)文章

  • React Hooks 越來越火了,它會取代傳統(tǒng)的 Redux 嗎?

    摘要:前言自推出之后,收到了不少追捧,很多問題也隨之而來。在出現(xiàn)之前,可以使用保存狀態(tài)和更新狀態(tài)用以應(yīng)對這種情況。為了在這個用例上追趕的腳步,的需要提供副作用隔離功能。提供了一個,可以用它接入你的風(fēng)格的。 showImg(https://segmentfault.com/img/remote/1460000019913697?w=1280&h=853); 前言 React Hooks 自推出...

    Scliang 評論0 收藏0
  • 這樣做動畫交互,一點都不費力!

    摘要:圖層信息第一層動畫圖層圖層類型動畫該圖層起始關(guān)鍵幀該圖層結(jié)束關(guān)鍵幀開始第層動畫如何動起來時序圖利用屬性動畫控制進度,每次進度改變通知到每一層,觸發(fā)重繪。對于簡單的動畫,在實際使用時性能不太明顯。 本文由云+社區(qū)發(fā)表作者:paulzeng 導(dǎo)語:Lottie是Airbnb開源的一個面向 iOS、Android、React Native 的動畫庫,可實現(xiàn)非常復(fù)雜的動畫,使用也及其簡單,極大...

    Meathill 評論0 收藏0
  • ahooks正式發(fā)布React Hooks工具庫

      起因  社會在不斷的向前,技術(shù)也在不斷的完善進步。從 React Hooks 正式發(fā)布到現(xiàn)在,越來越多的項目正在使用 Function Component 替代 Class Component,Hooks 這一新特性也逐漸被廣泛的使用。 這樣的解析是不是很熟悉,在日常中時常都有用到,但也有一個可以解決這樣重復(fù)的就是對數(shù)據(jù)請求的邏輯處理,對防抖節(jié)流的邏輯處理等。 另一方面,由于 Hoo...

    3403771864 評論0 收藏0
  • 精讀《怎么用 React Hooks 造輪子》

    摘要:可以看到,這樣不僅沒有占用組件自己的,也不需要手寫回調(diào)函數(shù)進行處理,這些處理都壓縮成了一行。效果通過拿到周期才執(zhí)行的回調(diào)函數(shù)。實現(xiàn)等價于的回調(diào)僅執(zhí)行一次時,因此直接把回調(diào)函數(shù)拋出來即可。 1 引言 上周的 精讀《React Hooks》 已經(jīng)實現(xiàn)了對 React Hooks 的基本認(rèn)知,也許你也看了 React Hooks 基本實現(xiàn)剖析(就是數(shù)組),但理解實現(xiàn)原理就可以用好了嗎?學(xué)的是...

    Shihira 評論0 收藏0
  • React Hook起飛指南

    摘要:起飛指南作者元瀟方凳雅集出品目前放出來了個內(nèi)置,但僅僅基于以下兩個,就能做很多事情。行代碼實現(xiàn)一個全局元瀟根組件掛上即可子組件調(diào)用隨時隨地實現(xiàn)一個局部元瀟的本質(zhì)是的一個語法糖,感興趣可以閱讀一下的類型定義和實現(xiàn)。 React Hook起飛指南 作者:元瀟 方凳雅集出品 16.8目前放出來了10個內(nèi)置hook,但僅僅基于以下兩個API,就能做很多事情。所以這篇文章不會講很多API,...

    姘擱『 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<