版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、immutable的后浪immer.js簡(jiǎn)介 react的reconciliation解決了虛擬dom更新的問(wèn)題,但沒(méi)有對(duì)在什么場(chǎng)景下優(yōu)化更新給出解決計(jì)劃,它不像reactive那樣能自動(dòng)跟蹤狀態(tài)變幻,而是把這個(gè)難題通過(guò)shouldcomponentupdate這個(gè)口子留給了開(kāi)發(fā)者。于是開(kāi)發(fā)者需要針對(duì)前后狀態(tài)的變幻舉行對(duì)照,以打算要不要繼續(xù)渲染更新dom。假如狀態(tài)對(duì)象的層次很深很復(fù)雜,那么這個(gè)對(duì)照必定會(huì)很疼痛。 但是話說(shuō)回歸,假如比較得很疼痛,那很有可能狀態(tài)對(duì)象設(shè)計(jì)的有問(wèn)題 于是immutable出生了,容易的可以把immutable看做是一個(gè)黑盒,輸入是對(duì)象a,輸出是一個(gè)對(duì)象a&ls
2、quo;。 用公式表示就是 如果輸入對(duì)象a1和a2徹低一樣(但仍然不是同一個(gè)實(shí)例),那么輸出的a1&39;和a2’能便利地比較出是否相等(提供了api挺直調(diào)用來(lái)比較),同時(shí)也能從a1&39;或a2&39;里拿出a1或a2的原始數(shù)據(jù)(但a1&39;和a2‘仍然是兩個(gè)不同的實(shí)例)。后續(xù)更新的操作也都是要通過(guò)a&39;的api來(lái)舉行了,也就是說(shuō)原始對(duì)象已經(jīng)離你遠(yuǎn)去。 名氣最大的immutable解決計(jì)劃就是當(dāng)年的immutable.js,本文介紹的immer.js屬于immutable界的后浪。immer這個(gè)詞來(lái)自于德語(yǔ)
3、的always,它的作者同時(shí)也是mobx的作者。 先上圖,看樣子仍然是個(gè)黑盒不變。 假如真沒(méi)任何變幻,那也稱不上是后浪了。它基于copy-on-write機(jī)制——在當(dāng)前的狀態(tài)數(shù)據(jù)上復(fù)制出一份暫時(shí)的草稿,然后對(duì)這份草稿涂涂改改,最后生成新的狀態(tài)數(shù)據(jù)。借力于es6的proxy,只需要挺直修改對(duì)象即可,不需要調(diào)用復(fù)雜的api(幾乎只用到一個(gè)produce函數(shù)?。?,跟響應(yīng)式的自動(dòng)跟蹤是一樣的。 官網(wǎng)文檔將其比方成你的小秘(不是小蜜),這個(gè)小秘復(fù)制一份你的信給你涂改,然后按照涂改能幫你打印出一份新的修改后的信件。 import produce from &
4、quot;immer" const basestate = todo: "learn typescript", done: true , todo: "try immer", done: false const nextstate = produce(basestate, draftstate => draftstate.push(todo: "tweet about it") draftstate1.done = true ) 假如了解響應(yīng)式的話,會(huì)發(fā)覺(jué) 在re
5、act里,setstate就變成了 this.setstate( produce(draft => draft.user.age += 1 ) ) 在redux里,reducer就變成了 const byid = produce(draft, action) => switch (action.type) case receive_products: ducts.foreach(product => draftproduct.id = product ) ) default分支也可以省略,由于produce辦法默認(rèn)返回原始對(duì)象實(shí)例。 也有個(gè)例外,就是假如要返回undefined還不能挺直干,得要返回nothing import produce, nothing from "immer" const state = hello: "world" produce(state, draft => ) produce(state, draft => undefined) / both return the original state: hello: "world" prod
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程維修突發(fā)事件應(yīng)急方案
- 防范化解重大風(fēng)險(xiǎn)工作實(shí)施方案
- 2023年紹興銀行社會(huì)招聘筆試真題
- 2023年湖州市教育局招聘筆試真題
- 學(xué)校國(guó)有資產(chǎn)管理制度
- 支部主題黨日制度
- 夜間值班管理制度
- 教師專業(yè)發(fā)展實(shí)施方案
- 第六章 集體兒童保健課件
- 磚砌排水溝施工工藝方案
- 車間每月安全隱患排查記錄表(車間每月)
- 電工基礎(chǔ)(中職)完整版教學(xué)課件
- 醫(yī)院創(chuàng)新思維的幾種基本形式與作用
- LoanAgreement(貸款協(xié)議)模板
- 中國(guó)上海日出日落方位角概要
- XXXX年葦湖梁煤礦儲(chǔ)量核實(shí)報(bào)告
- 醫(yī)藥物流項(xiàng)目可行性研究報(bào)告
- 《植物生理學(xué)》課件第九章+植物生長(zhǎng)生理
- 9.2維護(hù)國(guó)家安全優(yōu)秀課件(21張幻燈片)3個(gè)
- 機(jī)械原理大作業(yè)(共15頁(yè))
- 加強(qiáng)社區(qū)服務(wù)人才隊(duì)伍建設(shè)實(shí)施方案
評(píng)論
0/150
提交評(píng)論