国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

實現一個稍微復雜的simplelist

solocoder / 529人閱讀

摘要:是一個專門為應用所設計的集中式狀態管理架構。此時可以幫助我們實現狀態的管理。每個任務都歸屬于一個清單,有唯一的清單。說到這,一個復雜的的基本結構和功能已經出現了。

使用過一些清單類的應用程序,像 WunderList, Google Keep等,用來記錄一些計劃和安排,也試著將自己的計劃安排同筆記一起整理在 Evernote 中,但是無論哪種方式用起來總覺得少了點什么,如果兩者的一些功能能夠結合起來,就很完美了。

“todo”和“note”之間的關系本來就很微妙,一個“todo”寫得詳細點不就成了“note”嗎?于是自己寫了一個稍微復雜一點的清單程序,今天將項目總結整理在此。

我試著將 todo和 note 結合,可以像 WunderList 一樣記錄計劃,又可以 Evernote 一樣管理筆記。在開發過程中,反復調整和修改,最終發現:其實我只是做了一個支持 markdown 的 簡易版WunderList :(。不管怎么樣,能堅持下來就是值得鼓勵的。整個工程前后端分離,后端實現不在此介紹

前端代碼地址,
后端代碼地址,
在線預覽。

接下來,我簡單介紹一下 simplelist 的前端實現過程。注意,下面介紹的一些過程不是一蹴而就,是反復修改和整理得出的,比如技術選擇和組件的劃分。

編寫代碼的前期準備工作

有三點

確定需要實現的功能

確定界面

確定技術實現的方案

功能和界面先放一邊,介紹一下采用的技術方案。其實也沒啥可介紹的,前端老司機花樣多,但是主流的套路也就那么幾種,我選擇“套路のVue”。Vue+ Vuex+ Vue-Router,其他配件像 Less,Webpack等大家也應該都清楚。用戶登陸注冊及接口的實現不在本文章的討論中,下次再講。

組件劃分很關鍵

在 React 的組件化的劃分方式中,將組件分成兩種:Container Components和Presentational Components,容器組件和 UI組件。容器組件負責數據和業務邏輯的處理,攜帶相關的內部狀態,與數據有頻繁的交互, UI組件只負責 UI 的呈現,沒有任何的數據和邏輯的處理,組件的數據從容器組件傳遞進來(在 React中數據由 this.props 提供)。如果一個組件既有 UI 又有業務邏輯,可以試著將它拆分成兩個:一個容器組件,包著一個UI 組件。前者負責與外部的通信,將數據傳給后者,由后者渲染出視圖。

個人比較喜歡這種方式,組件變得純粹。不過似乎在 Vue 生態圈中沒有設計這方面的介紹,在后面我打算嘗試使用這種方式,不過現在還是使用相對粗暴一點的方式來劃分。

這是 WunderList 的界面,簡單的分析之后,可以將其劃分成如下形式,再詳細一點的話可以看下圖,如果堅持容器組件和 UI組件的形式開發的話,相對較復雜一點,而我選擇先從簡單的入手。想必你應該看過TodoMVC,而這樣也是simplelist 的最簡單也是最核心的功能。所以在實際操作過程中,我先將輸入框和單個任務這兩個組件實現。

Vuex

Vuex 是一個專門為 Vue.js 應用所設計的集中式狀態管理架構。它借鑒了 Flux 和 Redux 的設計思想,但簡化了概念,并且采用了一種為能更好發揮 Vue.js 數據響應機制而專門設計的實現。

在多帶帶使用 Vue.js 的時候,通常會把狀態儲存在組件的內部。整個應用的數據和狀態都是散落在各個組件。這樣并沒有有什么問題,組件的數據組建自己管理。有時候狀態的一部分需要共享給其他的組件,此時使用事件系統,讓一個組件把一些狀態“發送”到其他組件,但是當項目一步步擴大時,事件流將變得繁雜,不利于調試和維護。此時 Vuex 可以幫助我們實現狀態的管理。

Vuex 的四個核心概念分別是:

The state tree:Vuex 使用單一狀態樹,用一個對象就包含了全部的應用層級狀態,作為一個『唯一數據源(SSOT)』而存在。每個應用將僅僅包含一個 store 實例。單狀態樹讓我們能夠直接地定位任一特定的狀態片段,在調試的過程中也能輕易地取得整個當前應用狀態的快照。數據流都是單向的。

Getters:用來從 store 獲取 Vue 組件數據。

Mutators:事件處理器用來驅動狀態的變化,只有 mutation 可以改變狀態。

Actions:可以給組件使用的函數,用來派發 Mutation。

Vuex 規定,屬于應用層級的狀態只能通過 Mutation 中的方法來修改,而派發 Mutation 中的事件只能通過 action。從組件出發,組件中調用 action,在 action 這一層級我們可以和后臺數據交互,比如獲取初始化的數據源,或者中間數據的過濾等。然后在 action 中去派發 Mutation。Mutation 去觸發狀態的改變,狀態的改變,將觸發視圖的更新。

配合 Vuex 這樣的數據管理架構,我只需要關心組件的狀態變化,數據的變化和流通全部交給 Vuex。我需要維護一個數組,數組中每一個元素代表一個任務,輸入框和任務上的編輯刪除等操作,本質上都是對一個數組的操作。

給任務加上分類

我已經說過了,我要做的是復雜的 simplelist。所以,在完成了最簡單的增刪改的功能之后,要加上任務的自己的歸屬了。每個任務都歸屬于一個清單,有唯一的清單 id(list_id)。就像 WunderList 一樣,左側清單列表,右側任務列表。這時候需要用到單頁引用中必不可少的路由裝置了。

從簡單的開始,除了登錄和注冊(目前整合在應用中,更好的做法應該是登錄注冊作為兩個多帶帶的頁面,這里只是個人 demo,暫不考慮),暫且只有一種路由狀態,用來指向對應的清單,例如:/lists/:id下面是偽代碼

</>復制代碼

</>復制代碼

  1. const ListItem = {
  2. template: `
    {{item.title}}
    `,
  3. props: ["item"],
  4. }
  5. const ListContainer = {
  6. template: `
  7. List {{ $route.params.id }}

  8. `,
  9. components: {
  10. "list-item": ListItem,
  11. },
  12. }
  13. const router = new VueRouter({
  14. routes: [
  15. { path: "/lists/:id", component: ListContainer }
  16. ]
  17. })

然后綁定好 ,路由切換就算完成了。但是光這樣還不行,最關鍵的清單數據管理還沒有加上。其實清單的數據狀態管理與任務的管理大同小異,就不在此復述,你可以試著捋一捋。

彈層組件的管理

在創建和編輯清單的時候,需要彈出一個 modal 來方便操作(參照 WunderList)。這個時候就涉及到一個問題:這種定位不是很清晰的模塊,該怎么來管理?

在我看來,這種類型模塊大致有兩類,一類是全局共享,可能在很多不同的組件中都需要調用,這種全局的我認為可以多帶帶拿出來放在同一個地方供應用調用。另一類是只屬于某一個組件,只會在固定的組件中被調用,這類模塊推薦直接寫在組件中,方便管理,最好是寫在頂級組件中,避免一些全七八糟的樣式沖突(目前我遇到的主要還是層疊順序的問題)。

思路清晰之后,可以很順利的完成清單的創建和編輯功能。

說到這,一個復雜的 simplelist 的基本結構和功能已經出現了。那么問題來了,你學到了嗎?

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80486.html

相關文章

  • 翻譯連載 | JavaScript 輕量級函數式編程-第5章:減少副作用 |《你不知道JS》姊妹篇

    摘要:函數式編程者并沒有消除所有的副作用。我的結論是這里的并不違反減少或避免副作用的精神。一些語言允許你指定生成隨機數的種子。因此,我們必須將內建的隨機數生成視為不純的一方。其他的錯誤在程序運行期間副作用可能導致的錯誤是多種多樣的。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 關于譯者:這是一個流淌...

    yeyan1996 評論0 收藏0
  • React.js 小書 Lesson1-2 - 前端組件化(一):從一個簡單例子講起

    摘要:一個組件的顯示形態和行為有可能是由某些數據決定的。一個簡單的點贊功能我們會從一個簡單的點贊功能講起。我們需要結構,準確地來說我們需要這個點贊功能的字符串表示的結構。下一節小書前端組件化二優化操作中我們繼續優化這個例子,讓它更加通用。 React.js 小書 Lesson1-2 - 前端組件化(一):從一個簡單的例子講起 本文作者:胡子大哈本文原文:http://huziketang....

    null1145 評論0 收藏0
  • ArrayList 源碼詳細分析

    摘要:源碼分析構造方法有兩個構造方法,一個是無參,另一個需傳入初始容量值。所以我們可以把上面的代碼轉換一下,等價于下面形式這個時候,我們再去分析一下的迭代器源碼就能找出原因。原因是刪除元素后,元素計數器,而迭代器中的也等于,從而導致返回。 1.概述 ArrayList 是一種變長的集合類,基于定長數組實現。ArrayList 允許空值和重復元素,當往 ArrayList 中添加的元素數量大于...

    W4n9Hu1 評論0 收藏0

發表評論

0條評論

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