目錄
特點
聲明式語法
借鑒redux,flux等的思想,引入狀態管理
state
changeStore
action和dispatch
好處
引入virtual dom 和diff演算法
資料響應式原理
首頁 web前端 js教程 如何開發一個自訂程式庫

如何開發一個自訂程式庫

May 25, 2018 pm 01:38 PM
開發 自訂

這次帶給大家如何開發一個自訂函式庫,開發一個自訂庫的注意事項有哪些,以下就是實戰案例,一起來看一下。

當然這個函式庫還處在剛開始階段,功能實現的比較簡單,在此發表出來,歡迎大家藉此為基礎一起去完善它。專案地址: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
登入後複製

好處

隨著應用程式的日益複雜,資料量的增大,如果不對資料進行相應的管理,管理不斷變化的狀態,是非常困難的。狀態在什麼時候,由於什麼原因,發生了怎樣的變化都難以觀察。

  1. 這意味著應用程式中所有的資料都遵循相同的生命週期,這樣可以讓應用程式變得更加可預測且容易理解。

  2. 我們可以從changeStore 看到state能夠發生的所有變化

  3. 對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中文網其它相關文章!

推薦閱讀:

前端,HTT,電腦與網路

webkit-font-smoothing字體抗鋸齒渲染使用案例詳解

#

以上是如何開發一個自訂程式庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

四款值得推薦的AI輔助程式工具 四款值得推薦的AI輔助程式工具 Apr 22, 2024 pm 05:34 PM

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

AI程式設計師哪家強?探索Devin、通靈靈碼和SWE-agent的潛力 AI程式設計師哪家強?探索Devin、通靈靈碼和SWE-agent的潛力 Apr 07, 2024 am 09:10 AM

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語言開發行動應用程式 Mar 28, 2024 pm 10:00 PM

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

edius自訂螢幕佈局的操作流程 edius自訂螢幕佈局的操作流程 Mar 27, 2024 pm 06:50 PM

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

五大熱門Go語言庫總表:開發必備利器 五大熱門Go語言庫總表:開發必備利器 Feb 22, 2024 pm 02:33 PM

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

Android開發最適合的Linux發行版是哪一個? Android開發最適合的Linux發行版是哪一個? Mar 14, 2024 pm 12:30 PM

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

excel怎麼自訂x軸和y軸? (excel座標軸刻度如何自訂) excel怎麼自訂x軸和y軸? (excel座標軸刻度如何自訂) Mar 14, 2024 pm 02:10 PM

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

Go語言前端技術探秘:前端開發新視野 Go語言前端技術探秘:前端開發新視野 Mar 28, 2024 pm 01:06 PM

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

See all articles