最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

派發(fā)器抽離vue2單組件中的大量邏輯技巧

 更新時(shí)間:2022年07月27日 15:01:13   作者:陌年微涼_  
這篇文章主要為大家介紹了派發(fā)器抽離vue2單組件中的大量邏輯技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

概述

在vue2當(dāng)中,我們寫的邏輯都是options配置對象,比較固定的寫法,方法,數(shù)據(jù),都對應(yīng)到各自的配置項(xiàng)當(dāng)中,但是當(dāng)一個(gè)組件的邏輯變得更加復(fù)雜,邏輯也越來越多的時(shí)候,這時(shí)候,我們一個(gè)組件避免不了要寫大量的邏輯代碼,在2版本中,使用官方推薦的mixin可以解決一個(gè)組件邏輯過多的問題,現(xiàn)在記錄我在工作用用到的另外方法。

本質(zhì)

在react中,我們使用redux,會(huì)接觸到對應(yīng)的action,reducer,dispatch等等,通過派發(fā)對應(yīng)事件類型,然后觸發(fā)對應(yīng)邏輯修改,有點(diǎn)像發(fā)布訂閱,哈哈,在這里,借鑒react當(dāng)中使用redux的思路,記錄vue2當(dāng)中抽離邏輯代碼的技巧。

具體實(shí)現(xiàn)

舉例就拿最經(jīng)典的toodList來舉例

  • .components/ToodList/ToodList.vue
<template>
  <div>
    <input type="text" placeholder="請輸入關(guān)鍵字" v-model="value" /><button
      @click="handleAddTood"
    >
      操作按鈕
    </button>
    <tood-list-item
      v-for="item in list"
      :key="item.id"
      :item="item"
      @handleDel="handleDel"
    ></tood-list-item>
  </div>
</template>
<script>
import ToodListItem from "./ToodListItem";
export default {
  components: {
    ToodListItem,
  },
  props: {
    list: {
      type: Array,
      default() {
        return [];
      },
    },
  },
  data() {
    return {
      value: "",
    };
  },
  methods: {
    handleDel(item) {
      this.$emit("handelDel", item);
    },
    handleAddTood() {
      this.$emit("addTood", this.value);
    },
  },
};
</script>
  • .components/ToodList/ToodListItem.vue
<template>
  <div>
    <input type="checkbox" v-model="item.complated" />
    <span
      :style="{ textDecoration: item.complated ? 'line-through' : 'none' }"
      >{{ item.title }}</span
    >
    <button @click="handleDel(item)">刪除</button>
  </div>
</template>
<script>
export default {
  props: {
    item: {
      type: Object,
      default() {
        return {};
      },
    },
  },
  methods: {
    handleDel(item) {
      this.$emit("handleDel", item);
    },
  },
};
</script>

.components/ToodList/hook文件下:

  • actionTypes.js
//主要定義時(shí)間觸發(fā)的類型常量
export const ACTION_TYPES = {
  del: "DEL",
  add: "ADD",
};

.components/ToodList/hook文件下:

  • actionTypes.js
//派發(fā)器,通過action找到對應(yīng)的事件處理邏輯,然后觸發(fā)
import { addTood, removeTood } from "./toodReducer";
import { ACTION_TYPES } from "./actionTypes";
//接收參數(shù),vue組件上下文對應(yīng)
export default function (ctx) {
  function dispatch(args) {
    const { type, payLoad } = args;
    //根據(jù)行為,觸發(fā)reducer中的對應(yīng)邏輯
    switch (type) {
      case ACTION_TYPES.del:
        removeTood.bind(ctx)(payLoad);
        break;
      case ACTION_TYPES.add:
        addTood.bind(ctx)(payLoad);
        break;
      default:
        break;
    }
  }
  //返回綁定組件實(shí)例的函數(shù)
  return dispatch.bind(ctx);
}

.components/ToodList/hook文件下:

  • toodReducer.js
//主要事件處理邏輯文件(對應(yīng)vue組件中的一個(gè)個(gè)method方法)
//添加一個(gè)tood
export function addTood(value) {
  const toodListItme = {
    title: value,
    complated: false,
    id: Date.now(),
  };
  this.list.push(toodListItme);
}
//刪除一個(gè)tood
export function removeTood(item) {
  const { id } = item;
  this.list = this.list.filter((item) => item.id != id);
}
  • App.vue文件
<template>
  <div id="app">
    <tood-list
      :list="list"
      @handelDel="handelDel"
      @addTood="addTood"
    ></tood-list>
  </div>
</template>
<script>
import ToodList from "@/components/ToodList/ToodList.vue";
import dispatch from "./components/ToodList/hook/dispatch";
import { ACTION_TYPES } from "./components/ToodList/hook/actionTypes";
export default {
  name: "App",
  components: {
    ToodList,
  },
  data() {
    return {
      list: [
        {
          title: "第一項(xiàng)",
          complated: false,
          id: 1,
        },
        {
          title: "第二項(xiàng)",
          complated: false,
          id: 2,
        },
        {
          title: "第三項(xiàng)",
          complated: true,
          id: 3,
        },
      ],
    };
  },
  methods: {
  //邏輯代碼全部抽離到外部進(jìn)行處理,當(dāng)前組件只需要關(guān)注視圖即可
    handelDel(item) {
      dispatch(this)({
        type: ACTION_TYPES.del,
        payLoad: item,
      });
    },
    addTood(value) {
      dispatch(this)({
        type: ACTION_TYPES.add,
        payLoad: value,
      });
    },
  },
};
</script>

總結(jié)

在vue2中在一個(gè)組件中寫過多代碼還是很常見的,不好分離邏輯的地方就在this,因此避免一個(gè)文件邏輯過多,可以試試這種方法,在vue3更新后,移除單文件組件對this的過渡依賴,對應(yīng)的compositionApi已經(jīng)非常便于我們抽離單文件邏輯代碼了。

以上就是派發(fā)器抽離vue2單組件中的大量邏輯技巧的詳細(xì)內(nèi)容,更多關(guān)于派發(fā)器vue2單組件邏輯抽離的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決cordova+vue 項(xiàng)目打包成APK應(yīng)用遇到的問題

    解決cordova+vue 項(xiàng)目打包成APK應(yīng)用遇到的問題

    這篇文章主要介紹了解決cordova+vue 項(xiàng)目打包成APK應(yīng)用遇到的問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • vue.extend與vue.component的區(qū)別和聯(lián)系

    vue.extend與vue.component的區(qū)別和聯(lián)系

    這篇文章主要介紹了vue.extend與vue.component的區(qū)別和聯(lián)系,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2018-09-09
  • 前端處理axios請求下載后端返回的文件流代碼實(shí)例

    前端處理axios請求下載后端返回的文件流代碼實(shí)例

    使用axios可以很方便地獲取后端返回的文件流數(shù)據(jù),并在前端直接在瀏覽器下載,這篇文章主要給大家介紹了關(guān)于前端處理axios請求下載后端返回的文件流的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • 在vue.config.js中優(yōu)化webpack配置的方法

    在vue.config.js中優(yōu)化webpack配置的方法

    在日常開發(fā)中我們離不開打包工具webpack,但是不同的配置會(huì)影響我們項(xiàng)目的運(yùn)行構(gòu)建時(shí)間,也會(huì)影響打包之后項(xiàng)目包的大小,這篇文章記錄一下我使用過的可以優(yōu)化webpack的配置,需要的朋友可以參考下
    2024-05-05
  • 詳解Vue中Axios封裝API接口的思路及方法

    詳解Vue中Axios封裝API接口的思路及方法

    這篇文章主要介紹了詳解Vue中Axios封裝API接口的思路及方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 在vue中使用echarts實(shí)現(xiàn)上浮與下鉆效果

    在vue中使用echarts實(shí)現(xiàn)上浮與下鉆效果

    這篇文章主要介紹了在vue中使用echarts實(shí)現(xiàn)上浮與下鉆效果,本文分步驟給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Vue3生命周期Hooks原理與調(diào)度器Scheduler關(guān)系

    Vue3生命周期Hooks原理與調(diào)度器Scheduler關(guān)系

    這篇文章主要為大家介紹了Vue3生命周期Hooks原理與調(diào)度器Scheduler關(guān)系詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Vant如何自定義組件適配iphone底部安全區(qū)

    Vant如何自定義組件適配iphone底部安全區(qū)

    這篇文章主要介紹了Vant如何自定義組件適配iphone底部安全區(qū)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue組件中使用iframe元素的示例代碼

    vue組件中使用iframe元素的示例代碼

    本篇文章主要介紹了vue組件中使用iframe元素的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • vue 使用 sortable 實(shí)現(xiàn) el-table 拖拽排序功能

    vue 使用 sortable 實(shí)現(xiàn) el-table 拖拽排序功能

    這篇文章主要介紹了vue 使用 sortable 實(shí)現(xiàn) el-table 拖拽排序功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12

最新評論

镇坪县| 灵寿县| 霸州市| 广南县| 德清县| 克山县| 华池县| 新郑市| 通山县| 九江市| 江北区| 遵化市| 聂拉木县| 湘西| 遵义市| 海门市| 阿鲁科尔沁旗| 迭部县| 司法| 威海市| 凉山| 彭阳县| 许昌市| 噶尔县| 大田县| 梅州市| 潼南县| 方正县| 大邑县| 家居| 嘉禾县| 阳山县| 德保县| 平武县| 保定市| 宝丰县| 梧州市| 黄龙县| 元阳县| 吉水县| 彩票|