国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Vue3中是如何實現數據響應式示例詳解

瀏覽:4日期:2022-06-12 18:22:14
目錄副作用函數響應式數據副作用函數

指的是會產生副作用的函數;

JavaScriptlet val = 1;//全局變量function effect() { val = 2; //修改全局變量,產生副作用}

當effect函數執行時,對全局變量val產生了副作用,改變了其值。

響應式數據const obj = {text:'hello world'};function effect(){ //effect函數的執行讀取obj.text document.body.innerHTML = obj.text;}obj.text = 'hello Vue.js';

上面的副作用函數effect會設置body的innerText屬性,其值為obj.text,第6行代碼又修改了text的值,期望副作用函數重新執行,如果能實現這個目標,那么對于obj就是響應式數據。

如何才能讓obj變成響應式數據呢?通過觀察我們發現了兩點線索:

?當副作用函數effect執行時,會觸發字段obj.text的讀取操作;

?當修改obj.text的值時,會觸發字段obj.text的設置操作;

如果能夠攔截obj對象的讀取和設置操作,事情就迎刃而解了。當讀取字段obj.text時,我們可以把副作用函數存儲到一個“桶”中。

當設置obj.text時,再把副作用函數effect從“桶”里取出并執行。

按照上面的思路,使用Proxy來實現:

//創建一個副作用函數的桶 const bucket = new Set(); //原始數據 const data = { text: 'hello world' }; //對原始數據的代理 const obj = new Proxy(data, { ? //攔截讀取操作 ? get(traget, key) { ??? //將副作用函數effect添加到副作用函數的桶中 ??? bucket.add(effect); ??? //返回屬性值 ??? return traget[key]; ? }, ? //攔截設置操作 ? set(traget, key, newValue) { ??? //設置屬性值 ??? traget[key] = newValue; ??? //把副作用函數從桶中取出來并執行 ??? bucket.forEach((fn) => fn()); ??? //返回true代表設置操作成功 ??? return true; ? }, });

測試用例:

function effect() { ? document.body.innerHTML = obj.text; } effect(); setTimeout(() => { ? obj.text = 'hello vue3'; }, 1000);

目前的實現數據響應式還存在很多缺陷,比如副作用函數的名字是寫死的,后續再完善響應式系統。

以上就是Vue3中是如何實現數據響應式的詳細內容,更多關于Vue3數據響應式的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
主站蜘蛛池模板: 亚洲图片 自拍偷拍 | 99久久精品免费国产一区二区三区 | 伊人五月天婷婷琪琪综合 | 97国产在线视频 | 日韩一区二区三区在线免费观看 | 日本成人不卡视频 | 伊人久久大香线焦在观看 | 成人18免费软件 | 韩日一级视频 | 久久国产影视免费精品 | 久久久免费观成人影院 | 免费人成网站在线播放 | 美女被免费视频网站a国产 美女被免费网站视频软件 美女被免费网站在线软件 美女被免费网站在线视频软件 | 国产伦精品一区三区视频 | 久久综合99re88久久爱 | 午夜亚洲国产成人不卡在线 | 亚洲美女视频网址 | 91免费版网站 | 久久免费激情视频 | 国产成人久久精品二区三区牛 | 久久国产欧美日韩高清专区 | 真正国产乱子伦高清对白 | 韩国视频一区 | 国产毛片一级国语版 | 中文字幕成人 | a级片在线免费观看 | 老司机精品福利视频 | 在线观看视频国产 | 精品热99 | 日本一区二区免费在线观看 | 亚洲视频成人 | 日本高清在线精品一区二区三区 | 欧美成人一区二区三区 | 中文字幕有码视频 | 日韩欧一级毛片在线播无遮挡 | 欧美精品一区二区三区免费播放 | 91久久精品青青草原伊人 | 日韩午夜在线 | 精品欧美一区二区三区在线 | 男女国产一级毛片 | 亚洲综合精品一二三区在线 |