<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在vue2當中,我們寫的邏輯都是options設定物件,比較固定的寫法,方法,資料,都對應到各自的設定項當中,但是當一個元件的邏輯變得更加複雜,邏輯也越來越多的時候,這時候,我們一個元件避免不了要寫大量的邏輯程式碼,在2版本中,使用官方推薦的mixin可以解決一個元件邏輯過多的問題,現在記錄我在工作用用到的另外方法。
在react中,我們使用redux,會接觸到對應的action,reducer,dispatch等等,通過派發對應事件型別,然後觸發對應邏輯修改,有點像釋出訂閱,哈哈,在這裡,借鑑react當中使用redux的思路,記錄vue2當中抽離邏輯程式碼的技巧。
舉例就拿最經典的toodList來舉例
<template> <div> <input type="text" placeholder="請輸入關鍵字" 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>
<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檔案下:
//主要定義時間觸發的型別常數 export const ACTION_TYPES = { del: "DEL", add: "ADD", };
.components/ToodList/hook檔案下:
//派發器,通過action找到對應的事件處理邏輯,然後觸發 import { addTood, removeTood } from "./toodReducer"; import { ACTION_TYPES } from "./actionTypes"; //接收引數,vue元件上下文對應 export default function (ctx) { function dispatch(args) { const { type, payLoad } = args; //根據行為,觸發reducer中的對應邏輯 switch (type) { case ACTION_TYPES.del: removeTood.bind(ctx)(payLoad); break; case ACTION_TYPES.add: addTood.bind(ctx)(payLoad); break; default: break; } } //返回繫結元件範例的函數 return dispatch.bind(ctx); }
.components/ToodList/hook檔案下:
//主要事件處理邏輯檔案(對應vue元件中的一個個method方法) //新增一個tood export function addTood(value) { const toodListItme = { title: value, complated: false, id: Date.now(), }; this.list.push(toodListItme); } //刪除一個tood export function removeTood(item) { const { id } = item; this.list = this.list.filter((item) => item.id != id); }
<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: "第一項", complated: false, id: 1, }, { title: "第二項", complated: false, id: 2, }, { title: "第三項", complated: true, id: 3, }, ], }; }, methods: { //邏輯程式碼全部抽離到外部進行處理,當前元件只需要關注檢視即可 handelDel(item) { dispatch(this)({ type: ACTION_TYPES.del, payLoad: item, }); }, addTood(value) { dispatch(this)({ type: ACTION_TYPES.add, payLoad: value, }); }, }, }; </script>
在vue2中在一個元件中寫過多程式碼還是很常見的,不好分離邏輯的地方就在this,因此避免一個檔案邏輯過多,可以試試這種方法,在vue3更新後,移除單檔案元件對this的過渡依賴,對應的compositionApi已經非常便於我們抽離單檔案邏輯程式碼了。
以上就是派發器抽離vue2單元件中的大量邏輯技巧的詳細內容,更多關於派發器vue2單元件邏輯抽離的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45