如何開發一個自訂程式庫
這次帶給大家如何開發一個自訂函式庫,開發一個自訂庫的注意事項有哪些,以下就是實戰案例,一起來看一下。
當然這個函式庫還處在剛開始階段,功能實現的比較簡單,在此發表出來,歡迎大家藉此為基礎一起去完善它。專案地址:Hoz.js,歡迎大家start,fork,以及提issues。
特點
聲明式的模板語法
-
#借鑒redux,flux等的思想,引入狀態管理
引入virtual dom,diff 演算法,提高性能
聲明式語法
<p id = "app"> <p> <img src="{{moveImage}}" /> <p>{{moveName}}</p> </p> </p>
var hoz = new Hoz('app', state, changeStore) var state = { moveName: '', moveImage: '' } function changeStore (state, action) { switch (action.type) { case 'SET_NAME': { state.moveName = action.data break } case 'SET_IMAGE': { state.moveImage = action.data break } } } hoz.store.dispatch({ type: 'SET_NAME', data: '后来的我们' })
這就是一個hoz應用,透過簡潔的模板語法聲明式的將資料渲染進DOM系統。
且所有東西都是響應式的。
借鑒redux,flux等的思想,引入狀態管理
在狀態管理方面借鑒redux的思想,實現了單向資料流的管理。
主要定義了state,action,changeStore,dispatch4概念。
state
存放資料
var state = { moveName: '', moveImage: '' }
changeStore
#相當於redux中的reducer,存放著所有對資料的動作
function changeStore (state, action) { switch (action.type) { case 'SET_NAME': { state.moveName = action.data break } case 'SET_IMAGE': { state.moveImage = action.data break } } }
#接收action,執行對應的方法,修改state中的資料。有別於redux的是,redux放回的是全新的state,而它是直接操作目前的state,因為state中的資料已經透過Object.defineProperty方法進行了跟踪,這個後面再將。
action和dispatch
當想要對資料進行修改的時候,我們必須透過提交action的方式,在changeStore中去修改state
hoz.store.dispatch({ type: 'SET_NAME', data: '后来的我们' })
這個就是hoz的狀態管理策略
view -> dispatch -> action -> changeStore -> state -> view
好處
隨著應用程式的日益複雜,資料量的增大,如果不對資料進行相應的管理,管理不斷變化的狀態,是非常困難的。狀態在什麼時候,由於什麼原因,發生了怎樣的變化都難以觀察。
這意味著應用程式中所有的資料都遵循相同的生命週期,這樣可以讓應用程式變得更加可預測且容易理解。
我們可以從changeStore 看到state能夠發生的所有變化
對state修改的唯一方法就是向changeStore提交action,所以資料的每一次變更都會從一個地方流過,方便我們的debug等操作。
引入virtual dom 和diff演算法
總所周知,由於dom元素的龐大,以及dom操作容易引起頁面重排的原因,直接操作dom性能是非常非常差的。
所以hoz引入了virtual dom演算法,並用原生的JavaScript物件去映射dom對象,因為原生JavaScript物件的操作更快更簡單。
如何映射呢?例如
class VNode { constructor (sel, tagName, id, className, el, children, data, text, key) { this.tagName = tagName // p this.sel = sel // p#id.class this.id = id // id this.className = className // [] this.children = children // [] this.el = el // node this.data = data // {} this.key = key this.text = text } } export default VNode
只是一個JavaScript對象,代表一個dom元素。
我根據hoz建構子中傳進來的id 所指向的元素作為根元素建立一個虛擬dom樹,當資料改變的時候,不直接操作dom,而是在虛擬dom樹上進行操作修改。接著透過diff演算法比較新舊虛擬dom樹,對真實dom進行最小單位的修改。
資料響應式原理
hoz式如何做到資料的響應式的呢?這裡主要透過借助Object.defineProperty方法實現了一個發布/訂閱模式,透過Object.defineProperty修改state中資料的getter和setter屬性,在首次渲染的時候,在getter中將對應的訂閱者加入到一個主題物件中去,當資料改變的時候在setter中呼叫對應資料的主題物件的notify方法發布訊息,通知每個訂閱者更新。
state -> data -> publisher 一对多的关系 | Dep | view -> {{data}} -> subscribers
希望大家藉此為基礎一起去完善它。專案地址:Hoz.js,歡迎大家start,fork,以及提issues。
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
webkit-font-smoothing字體抗鋸齒渲染使用案例詳解
#以上是如何開發一個自訂程式庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

這個AI輔助程式工具在這個AI快速發展的階段,挖掘出了一大批好用的AI輔助程式工具。 AI輔助程式設計工具能夠提升開發效率、提升程式碼品質、降低bug率,是現代軟體開發過程中的重要助手。今天大姚給大家分享4款AI輔助程式工具(而且都支援C#語言),希望對大家有幫助。 https://github.com/YSGStudyHards/DotNetGuide1.GitHubCopilotGitHubCopilot是一款AI編碼助手,可幫助你更快、更省力地編寫程式碼,從而將更多精力集中在問題解決和協作上。 Git

2022年3月3日,距離世界首個AI程式設計師Devin誕生不足一個月,普林斯頓大學的NLP團隊開發了一個開源AI程式設計師SWE-agent。它利用GPT-4模型在GitHub儲存庫中自動解決問題。 SWE-agent在SWE-bench測試集上的表現與Devin相似,平均耗時93秒,解決了12.29%的問題。 SWE-agent透過與專用終端交互,可以開啟、搜尋文件內容,使用自動語法檢查、編輯特定行,以及編寫和執行測試。 (註:以上內容為原始內容微調,但保留了原文中的關鍵訊息,未超過指定字數限制。)SWE-A

Go語言開發行動應用程式教學隨著行動應用程式市場的不斷蓬勃發展,越來越多的開發者開始探索如何利用Go語言開發行動應用程式。作為一種簡潔高效的程式語言,Go語言在行動應用開發中也展現了強大的潛力。本文將詳細介紹如何利用Go語言開發行動應用程序,並附上具體的程式碼範例,幫助讀者快速入門並開始開發自己的行動應用程式。一、準備工作在開始之前,我們需要準備好開發環境和工具。首

1.下圖是edius預設的螢幕佈局,預設的EDIUS視窗佈局是橫向版式,因此在單一顯示器環境中,許多視窗是重疊在一起的,且預覽視窗為單一視窗模式。 2、您可以透過【檢視】選單列啟用【雙視窗模式】,使預覽視窗同時顯示播放視窗和錄製視窗。 3.您可以透過【檢視功能表列>視窗佈局>常規】來恢復預設螢幕佈局。另外您也可以自訂適合您的佈局方式,並儲存為常用螢幕佈局:將視窗拖曳成適合自己的佈局,然後點擊【檢視>視窗佈局>儲存目前佈局>新建】,在彈出的【儲存目前佈局】小視窗中輸入佈局名稱,按確定

五大熱門Go語言庫總結:開發必備利器,需要具體程式碼範例Go語言自從誕生以來,受到了廣泛的關注和應用。作為一門新興的高效、簡潔的程式語言,Go的快速發展離不開豐富的開源程式庫的支援。本文將介紹五大熱門的Go語言庫,這些庫在Go開發中扮演了至關重要的角色,為開發者提供了強大的功能和便利的開發體驗。同時,為了更好地理解這些庫的用途和功能,我們會結合具體的程式碼範例進行講

Android開發是一項繁忙而又令人興奮的工作,而選擇適合的Linux發行版來進行開發則顯得尤為重要。在眾多的Linux發行版中,究竟哪一個最適合Android開發呢?本文將從幾個方面來探討這個問題,並給出具體的程式碼範例。首先,我們來看看目前流行的幾個Linux發行版:Ubuntu、Fedora、Debian、CentOS等,它們都有各自的優點和特點。

在excel表格中,有時候可能需要插入座標軸,能夠更直觀地看到資料的變化趨勢。還有些小夥伴不清楚怎麼在表中插入座標軸,接下來小編就跟大家分享一下excel自訂座標軸刻度的方法吧。 座標軸插入方法: 1、在excel介面中,選取資料。 2、在插入介面中,點選插入長條圖或長條圖。 3、在展開的介面中,選擇形圖類型。 4、在表格右鍵介面中,點選選擇資料。 5、在展開的介面中,進行自訂即可。

Go語言作為一種快速、高效的程式語言,在後端開發領域廣受歡迎。然而,很少有人將Go語言與前端開發聯繫起來。事實上,使用Go語言進行前端開發不僅可以提高效率,還能為開發者帶來全新的視野。本文將探討使用Go語言進行前端開發的可能性,並提供具體的程式碼範例,幫助讀者更了解這一領域。在傳統的前端開發中,通常會使用JavaScript、HTML和CSS來建立使用者介面
