



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
第詳解Vue3的響應式原理解析Vue3響應式原理剖析
vue3使用ES6的Proxy特性來解決這些問題。
functionreactive(obj){
if(typeofobj!=='object'obj!=null){
returnobj
//Proxy相當于在對象外層加攔截
///#docs/proxy
constobserved=newProxy(obj,{
get(target,key,receiver){
//Reflect用于執(zhí)行對象默認操作,更規(guī)范、更友好
//Proxy和Object的方法Reflect都有對應
///#docs/reflect
constres=Reflect.get(target,key,receiver)
console.log(`獲取${key}:${res}`)
returnres
set(target,key,value,receiver){
constres=Reflect.set(target,key,value,receiver)
console.log(`設置${key}:${value}`)
returnres
deleteProperty(target,key){
constres=Reflect.deleteProperty(target,key)
console.log(`刪除${key}:${res}`)
returnres
returnobserved
//代碼測試
conststate=reactive({
foo:'foo',
bar:{a:1}
//1.獲取
state.foo//ok
//2.設置已存在屬性
state.foo='fooooooo'//ok
//3.設置不存在屬性
state.dong='dong'//ok
//4.刪除屬性
deletestate.dong//ok
嵌套對象響應式
測試:嵌套對象不能響應
//設置嵌套對象屬性
react.bar.a=10//nook
添加對象類型遞歸
//提取幫助方法
constisObject=val=val!==nulltypeofval==='object'
functionreactive(obj){
//判斷是否對象
if(!isObject(obj)){
returnobj
constobserved=newProxy(obj,{
get(target,key,receiver){
//...
//如果是對象需要遞歸
returnisObject(res)reactive(res):res
//...
避免重復代理
重復代理,比如
reactive(data)//已代理過的純對象
reactive(react)//代理對象
解決方式:將之前代理結(jié)果緩存,get時直接使用
consttoProxy=newWeakMap()//形如obj:observed
consttoRaw=newWeakMap()//形如observed:obj
functionreactive(obj){
//...
//查找緩存,避免重復代理
if(toProxy.has(obj)){
returntoProxy.get(obj)
if(toRaw.has(obj)){
returnobj
constobserved=newProxy(...)
//緩存代理結(jié)果
toProxy.set(obj,observed)
toRaw.set(observed,obj)
returnobserved
//測試效果
console.log(reactive(data)===state
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 退休返聘勞務合同范本
- 小學安全教育家長會活動計劃
- 六年級語文后進生能力評估計劃
- 多功能高速公路旁站維護計劃
- 手術(shù)室保潔工作流程再造計劃
- 學校環(huán)境裝飾工程資源配置計劃
- 美學教育中介合同
- 2019-2025年一級造價師之建設工程計價真題練習試卷B卷附答案
- 2019-2025年衛(wèi)生招聘考試之衛(wèi)生招聘(財務)自測模擬預測題庫(名校卷)
- 人教版三年級語文文化藝術(shù)交流計劃
- 黃腐植酸肥項目投資計劃書
- 小學數(shù)學二年級下冊-第七、八單元教材分析
- 敦煌研學旅行方案
- 2024年計算機軟考(初級)程序員考試題庫大全(含真題等)
- 思辨與創(chuàng)新智慧樹知到期末考試答案章節(jié)答案2024年復旦大學
- 職業(yè)道德與法律第一課第一節(jié)課件市公開課一等獎省賽課微課金獎課件
- 2024年湖北水利發(fā)展集團有限公司招聘筆試沖刺題(帶答案解析)
- (完整版)韓國商法
- 2024中國南水北調(diào)集團東線有限公司招聘筆試參考題庫含答案解析
- 2024春期國開電大思政課《中國近現(xiàn)代史綱要》在線形考(專題檢測一至八)試題及答案
- 2024貓砂行業(yè)調(diào)研報告(比億奇、LORDE)-解數(shù)咨詢
評論
0/150
提交評論