Vuex 初體驗
Vue CLI 已經支援 Vuex,我們可由 Vue CLI 快速建立使用 Vuex 專案。
失くすものさえない今が強くなるチャンスよ
Vue CLI 已經支援 Vuex,我們可由 Vue CLI 快速建立使用 Vuex 專案。
傳統 Vuex 都以 this
使用,這使得 Extract Function 時還必須將 Vue Instance 傳進 Function,事實上 Vuex 也能不使用 this
,直接 Import Store 使用,甚至更近一步 Point-free。
傳統 Vue Router 都以 this
使用,這使得 Extract Function 時還必須將 Vue Instance 傳進 Function,事實上 Vue Router 也能不使用 this
,直接 Import Router 使用,甚至更進一步 Point-free。
實務上有些需求只希望 User 只能 Click Button 一次,之後任何 Click 都忽略不計,此時可使用 once
Event Modifier 達成。
實務上較少在 v-for
內自行處理 DOM node,若真的需要則要使用 ref
與 $nextTick()
。
若 Prop 只用來對 Component 傳入初始值設定,只要在 mounted
hook 接受並寫入 data
即可;但若日後還會將改變 Data 傳入 Prop,且希望 Component 能 Reactive 根據 Prop 改變,則要搭配 Computed 或 Watch。
實務上 Vue 應該盡量使用 Model-based 寫法,專心處理 Data,HTML 則由 Vue 處理,但偶而會想直接使用 DOM API 處理 DOM,此時可使用 $refs
。
Vue 的 data
可提供預設值代表型別方便日後維護,事實上 Component 的 Prop 也能提供預設值代表型別。
實務上有時候 UI 不見的一開始就有全部 Component,而是 User 按下 Button 才會動態加入,在 Vue 只要使用簡單的 v-for
就可完成。
當使用 v-for
顯示重複資料時,直覺都會想到 Array,事實上 ECMAScript 的 Object 也是一種 Container,而 v-for
也支援 Object,在有些情境使用 Object 會比 Array 方便。
有些 HTML Element 有其預設行為,如 <a>
與 <input type="submit">
,使用 prevent
Event Modifier 可避免執行預設行為。
DOM Event 天生具有 Event Propagation 特性,且是由內向外觸發 Event,若想只有特定 Element 不接受 Event Propagation 所傳出 Event,可使用 self
Event Modifier。
DOM Event 天生具有 Event Propagation 特性,且是由內向外觸發 Event,若想由外向內觸發,則稱為 Event Capturing,Vue 提供了 capture
Event Modifier,讓我們在 HTML Template 就能以 Declarative 形式使 Event 往內層傳遞。
DOM Event 天生具有 Event Propagation 特性,Vue 提供了 stop
Event Modifier,讓我們在 HTML Template 就能以 Declarative 形式阻止 Event 往外層傳遞。
Vue 允許我們對 HTML Tag 使用 v-model
達成 Two-way Binding,我們除了也可使用 v-model
對 Prop 達成 Two-way Binding 外,也可使用 .sync
。
Vue 允許我們對 HTML Tag 使用 v-model
達成 Two-way Binding,我們也可使用 v-model
對 Prop 達成 Two-way Binding。
Vue-web-cam 若正常使用沒問題,但若將 Component 包在 v-if
內時則表現不如預期,必須配合一些 Workaround 解決。
HTML 5 已經內建支援 Camera,Vue-web-cam 將 HTML 5 API 封裝成更適合 Vue 使用,還可以選擇內建 Camera 或者 USB Camera,更支援 Mobile Browser。
如詢問是否開啟 Camera 只有在 HTTPS 才會發生,因此在本機開啟 HTTPS 模式成為開發測試所必須,Vue CLI 並沒有內建 HTTPS,需另外加已設定。
傳統對其他 Page 傳遞資料時,會以 Query String 形式,除了會暴露資料遭 Hacker 嘗試破解外,也不適合傳遞太多資料,若能將這些資料整合成 Object 傳遞,且不必出現在 URL,那就非常完美。
三連動下拉選單也是實務上常見需求,只要兩個 Component 就可實現二連動下拉選單。
Component 概念為 React 所發明,讓我們可以將 HTML、CSS 與 JavaScript 封裝成 Component,Vue、Angular 也使用 Component ,至此 3 大 Framework 都採用 Component-based 架構。
很多人對於 Functional CSS 直覺印象就是 HTML 會帶一堆 CSS Class,事實上當 Component 觀念出現後,由於 Prop 也能用在 CSS,因此 CSS 就有了新的用法。
SCSS 使用越來越普遍,Vue CLI 也直接支援,可在 CSS Template 直接寫 SCSS。
Vue Component 的 Prop,只能解決資料由外層 Component 傳給內層 Component,若要將資料從內層 Component 傳到外層 Component 呢 ? 此時就要使用 Event。
雖然在 Vue 儘量在 Component 內使用 Scoped CSS 避免 CSS 互相影響,但若各 Component 都套用,還是無法避免使用 Global CSS,原本 Vue 有多種方式使用 Global CSS,若使用 TailwindCSS 則有不同方式。
Component 若只有一層,那問題不大,若牽涉到 Component 包含 Component,就會牽涉到一個基本問題:該如何將 Model 由外層 Component 傳給內層 Component ? 此時就要使用 Prop。
一般來說呼叫 API 的 Asynchronous 才會遇到 Promise,也才需要 Error Handling,但 SweetAlert2 按下 Confirm
時回傳 Fulfilled Promise,按下 Cancel
時回傳 Rejected Promise,此時會進入處理 API 的 Error Handling,這該如何解決呢 ?
Chrome 可藉由 Source Map 在 Dev Tools 顯示 Vue 的 Source Code,但你可能希望 yarn build
之後的 Production Build 不要產生 Source Map,此需求可藉由 vue.config.js
設定達成。
Vue CLI 已經幫我們建立了一般 SPA 所需的檔案與目錄架構,實務上會依需求再建立其他相關 Folder。
Vue-konva 除了能繪製圖片與圖形外,也可以繪製文字。
Vue-konva 除了在 HTML Template 以 Declarative 使用外,也可完全以 API 方式動態繪圖。
若要同時顯示圖片與矩形,也可使用 Vue-konva 繪製圖片與矩形。
Vue-konva 除了能繪製圖形外,也能繪製圖片,讓我們以更靈活方式控制圖片。
Vue-konva 底層為 HTML 5 Canvas,可簡單使用 Canvas 繪圖,並具有 Vue 的 Declarative 與 Reactive 特性。
若 API 每次傳入的 Query String 相同,所回傳的結果也相同,對於這類 API 可以加上 Cache,當參數相同時,就不再發起 API Request,如此不但節省後端資源,使用者體驗更佳。事實上 ECMAScript 的 Closure + IIFE 就能實作出 Cache,並不需要依賴其他 Library。
Vue-video-player 與 Video.js 雖然能顯示 HLS,但卻沒提供 Capture Image 功能,我們必須使用 HTML 5 的 Canvas 才能達成需求。
Safari 的 <video>
tag 可直接支援 HLS,但 Chrome 與 Firefox 則不行,透過 Vue-video-player 則可在 Safari、Chrome 與 Firefox 都支援 HLS。
若前後端分離,且同時在本機開發 Vue 前端與 Node 後端時,很容易遇到違反 Same-Origin Policy 問題,本文介紹多種方式解決。
管理 JWT Token 是前端不可避免的課題,若只透過 Vuex 或 Local Storage 都有其缺憾,唯有同時結合 Vuex 與 Local Storage 才是最完美方案。