今天聽了部門的高t分享的react和其他框架思想的對比,真的是受益匪淺,所以特地把高t分享的總結一下。
前端開發本質上是一種展現層開發,我思考了一下這句話,這句話用人話說就是前端開發本身就是寫介面的。但是別人能把寫介面的能總結成下面乙個迴圈,我發現這真的是能力了。如下圖,有略微的改動:
(下面就開始進入正題了。
先看下圖:
使用者操作介面
當使用者操作的檢視的時候會派發乙個事件給action
當action接受到這個事件的時候,呼叫model對應的方法
使用者操作介面
當使用者操作的檢視的時候會派發乙個事件給action
當action接受到這個事件的時候,呼叫model對應的方法
model得知view改變了,然後進行相應的操作,改變自身所儲存的資料
當model改變了,派發乙個事件給action
使用者操作介面
當使用者操作的檢視的時候會派發乙個事件給action
當action接受到這個事件的時候,呼叫model對應的方法
model得知view改變了,然後進行相應的操作,改變自身所儲存的資料
當model改變了,派發乙個事件給action
當action知道model的資料變化的時候,呼叫views中的方法
view改變自身
但是這樣是有下面兩個問題的,
- 互動增加導致view的控制**迅速膨脹,最終導致**不可維護
- model的控制**也會變多,
以至於出現下面的狀況:
雖然mvc有以上的弊端,但是因為沒有乙個好的架構思想去取代他,所以也只能用mvc了,但是隨著前端angular的橫空出世,倡導的mvvm思想也隨之深入人心,先看下圖:
view和viewmodel的資料雙向繫結
當使用者操作view的時候,viewmodel也進行物件對應的變化
這樣,我們能通過操作model來控制view的顯示,乙個頁面的比如能拆分為小功能(註冊/登陸、表單提交、***功能)這樣每個功能對應乙個model,我們就能模組化的管理model,就變為了下圖:
所以當使用者操作介面的時候,我們viewmodel就知道是哪部分發生了變化,對應的viewmodel就進行改變。
了解react的都知道,react對強大的功能就是vdom,能夠計算出最有效也是花費最小的vdom和真實dom的差異並進行改變。
下圖為mvvm的整體設計思路:
使用者操作view
dispatch view事件給狀態管理
狀態管理工具更新狀態/進行到下乙個狀態
根據新的狀態,render view
react遵從的是單向的資料流:
- 存在乙個model到react的對映關係,即view的渲染方法
- view並不知道自己對應modle哪一塊
- 於是每次model的變更,view全部更新。react的vdom演算法保證了render的高效
要解決的問題: 複雜的web互動導致view更新邏輯的**
解決思路:
- mvvm:記錄model、雙向繫結,model變更時更新view對應部分
- react:實現view高效更新演算法,model變更時更新整個view
mvvm的實現是在工程上進行解決,react在解決思路(演算法)上進行解決
單向資料流
props是單向繫結的,當父元件的屬性變化時,將傳導給子元件,但是不會反過來 而且不允許子元件直接修改父元件中的資料,報錯 解決方式 方式1 如果子元件想把它作為區域性資料來使用,可以將資料存入另乙個變數中再操作,不影響父元件中的資料 方式2 如果子元件想修改資料並且同步更新到父元件,兩個方法 a....
單向資料流
doctype html html lang en head meta charset utf 8 title vue title script src bower components vue dist vue.js script head body div id box aaa aaa div ...
單向資料流
所有的 prop 都使得其父子 prop 之間形成了乙個單向下行繫結 父級 prop 的更新會向下流動到子元件中,但是反過來則不行。這樣會防止從子元件意外變更父級元件的狀態,從而導致你的應用的資料流向難以理解。額外的,每次父級元件發生變更時,子元件中所有的 prop 都將會重新整理為最新的值。這意味...