亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

3403771864 / 710人閱讀

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

  hook的場(chǎng)景

1.jpg

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

  假如: 我的收藏、已投遞崗位、未投遞崗位 都各自獲取列表,就會(huì)出現(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個(gè)頁面都要寫上: 定義變量 -> 初始獲取 -> 獲取的代碼判斷 -> 底部觸發(fā)的代碼。因此就直接分裝了一個(gè) 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(),
  };
  }

  已上代碼就是簡(jiǎn)單的獲取到崗位的 list 還未進(jìn)行操作。

  總結(jié)思路,

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

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

  就是在getJobParameter 的參數(shù)全部暴露出去,再對(duì)這些參數(shù)進(jìn)行操作,你是否也感覺這樣跟不分裝好像區(qū)別也不大,又思考要不在 useGetJobList 加一個(gè)參數(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();
  // 這個(gè)后面的代表異步了
  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(),
  };
  }

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

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

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

  緣由

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

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

  utils 和 hook 的區(qū)別

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

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

  總結(jié)小tips

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

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

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


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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/128234.html

相關(guān)文章

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

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

    Scliang 評(píng)論0 收藏0
  • 這樣做動(dòng)畫交互,一點(diǎn)都不費(fèi)力!

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

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

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

    3403771864 評(píng)論0 收藏0
  • 精讀《怎么用 React Hooks 造輪子》

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

    Shihira 評(píng)論0 收藏0
  • React Hook起飛指南

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

    姘擱『 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<