<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      歡迎圍觀我的新網站:深圳德愷實驗室

      如何構建一個僅有2KB大小、無依賴的狀態管理器(以及它如何幫我獲得兩個不同的工作機會)

      大家好,我是前端寶哥

      這篇譯文講述了如何通過利用JavaScript原生特性獨立開發一個輕量級狀態管理器,以及通過個人項目打開就業之門的真實經歷。不僅掌握了技術知識,也獲得了重要的就業經驗,實在是一個coding和職場雙重收獲的好文章!以下為原文:

      什么是狀態管理器?狀態管理器是一個智能模塊,能夠保存應用程序或Web應用的會話數據,并對數據的變化做出反應。你是一名Web開發者嗎?曾經使用過Redux、Mobx或Zustand等庫嗎?恭喜!你已經使用過狀態管理器了。我記得當我開始嘗試為React設置(舊版)Redux的時候,我感到很困惑。一想到所有的不必要的復雜性——派發器、減速器、中間件!我只想聲明一些變量,請停止這一切。

      圖片

      那是一個過度設計、臃腫的庫,每個人都在使用!而且出于某種瘋狂的、不知名的原因,當時它是行業的標準。

      一些背景故事

      2021年的一個晚上,當我無法入睡時,我漫無目的地打開了GitHub,注意到我以前的大學課程老師(我在GitHub上關注他)上傳了一份給他現在的學生的作業。作業要求學生使用公共的Pokemon API創建一個Pokedex網站。目標是在Javascript中實現它(不使用框架或庫,因為他的學生是Web開發初學者,還在學習Javascript和開發的基礎知識)。作為一個玩笑,主要是因為我睡不著,我開始為我的Pokemon網站工作。最終,我能夠創建出一個可行的東西,而不使用任何外部庫。

      但在此過程中,我遇到了一些困難...

      你看,我習慣了使用狀態管理器,所以要求我構建一個甚至連使用外部框架或庫都不允許的簡單的兩頁應用程序,讓我思考——為什么狀態管理器要這么復雜?只是一些變量和事件而已。長話短說,凌晨兩點,我不顧一切地拼湊出了一個超級簡單的狀態管理器模塊,只為了管理我的Pokemon Web應用程序的狀態。我將我的網站部署到GitHub頁面上,然后把它完全忘記了。幾個月過去了,但出于某種原因,我時不時地想起我的狀態管理解決方案...你看,它有一些其他庫所沒有的東西——它極其簡單?!昂?!”我對自己說,“我應該將它重寫為一個NPM包”。當晚,我就這么做了——我把它作為一個獨立的NPM包編寫出來。最終,它只有2KB的大小(相比于Redux的150KB),沒有任何依賴,并且使用起來非常簡單,只需3行代碼就可以設置好。

      我把它稱為VSSM

      VSSM代表非常小的狀態管理器(Very Small State Manager)。

      你可以在GitHub(https://github.com/lnahrf/Vssm)上查看源代碼。同時,也可以查看使用React和VSSM構建的文檔站點(https://lnahrf.github.io/Vssm-docs/)。

      第二天,我發布了我的NPM包,然后再次把它完全忘記了。

      同年晚些時候,我在兩家不同的公司面試全棧開發者職位。我通過了第一家公司的面試,這是一家非常知名的技術公司。作為面試流程的一部分,他們要求我談談自己是否在業余時間編寫代碼,是否有任何開源項目的貢獻等我唯一做過的酷事就是VSSM,所以我告訴了他們。他們對我自己構建了一個"Redux替代方案"的想法印象深刻。

      另一方面,我在第二家公司的面試中表現非常糟糕。我一片空白,緊張得連簡單的問題都回答不出來,比如:

      "當使用Redux時,React是否在每次狀態更改時重新渲染整個應用程序,還是只更新受影響的組件及其子組件?"

      "每次狀態更新時,它會重新渲染整個應用程序", 我說道。

      圖片

      我非常緊張,哈哈,顯然我知道正確答案是"它只渲染注冊的組件及其可能受影響的子組件"。

      直到今天,我仍然不知道為什么第二家公司決定給我第二次機會。他們邀請我去參加另一次面試(太好了!)。

      在我的第二次面試中,他們要求我談談自己是否在業余時間編寫代碼,是否有開源項目的貢獻,你懂的。當我告訴面試官關于我的小項目時,他看起來非常高興,似乎他喜歡我僅憑自己從頭開始編寫了一個狀態管理器的事實。

      我想這可能是因為我在第二次面試中也失敗了(在編碼挑戰中時間不夠),但仍然得到了一個工作機會。第一家公司打算給我發一份聘書,但我已經接受了第二家公司的聘書。

      我想要說的是——事實上,我構建了一個只有2KB大小、無依賴且非常簡單易用的狀態管理器,這使我獲得了兩個不同的工作機會。

      圖片

      我是如何做到的?

      你知道 Javascript 已經內置了監控變量變化所需的所有功能嗎?

      這就是代理(它很神奇)。

      Javascript 代理是代碼和變量賦值之間的附加邏輯層。

      如果將一個對象封裝在代理中,每次更新時都可以決定將其值記錄到控制臺,而無需做任何事情,只需為對象賦一個新值即可。

      const target = {
        v: "hello" }
      }
      
      const proxyTarget = new Proxy(target, {
        set: (target, property, value) => {
      
            console.log(`${property} is now ${value}`); 
      
          target[property] = value;
          return target[property];
        }
      });
      
      proxyTarget.v = "world!" // v is now world! // v 現在是 world!
      
      

      VSSM 建立在代理之上,它在變量賦值和其余代碼之間創建了一個層。使用代理,你可以設置設置器、獲取器,并在操作或請求目標值時實現任何邏輯。

      VSSM 不僅僅是一個代理,它還是各種智能代理,知道你分配給變量的值是其新值還是回調方法。

      例如,使用 VSSM,只需幾行代碼就能設置狀態、監聽變化并發出事件。

      import { createVSSM, createState } from 'vssm';
      import { getVSSM } from 'vssm';
      
      // 創建初始狀態
      createVSSM({
        user: createState('user', {
          address: ''
        })
      });
      
      // 獲取用戶代理引用
      const { user } = getVSSM();
      
      // 監聽 user.address 上的事件
      user.address = () => {
          console.log(` 地址已更新!新地址為 ${user.address}`);
      };
      
      // 發送突變事件
      user.address = 'P.Sherman 42 Wallaby Way, Sydney'
      
      

      正如你所看到的,我確保我的狀態管理器盡可能簡單。我的目標是讓你不必再為分配一些變量而絞盡腦汁地想減速器、中間件和極其復雜的配置。

      現在,一切都可以通過分配變量來實現!想要設置一個監聽器?給變量分配一個回調函數。想要編輯值并發出事件?只需賦值即可。

      直到今天,我都不明白為什么流行的狀態管理器必須如此復雜,也許我永遠也不會明白。

      我鼓勵你繼續閱讀 MDN Web Docs(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) 上關于 Javascript 代理的所有內容。

      這一切的結論是什么?

      我認為,對工作的熱情是關鍵。

      我創建 VSSM 只是為了挑戰自己的極限,發布一個合理的 NPM 軟件包。它給面試官和同行留下了深刻印象,讓我從此走上了不同的崗位。

      沒有人會使用VSSM,它不會流行。當我把它發布到 NPM 時,我就意識到了這個事實。但我仍然選擇盡我所能去做,因為我有一種激情,要做一些我認為比行業標準更好的東西。我知道我可以做出必須更好的東西,哪怕這意味著對我來說更好。

      盡管 VSSM 已經死在了 NPM 的墳場里,但它給我帶來了很多價值,而且因為這篇文章,它還在繼續給我帶來價值。

      獲得開發工作的最佳途徑就是構建令人驚嘆的東西,即使你認為這些東西都是前人做過的,也要把它做得更好。即使你認為沒有人會使用它,那又有什么意義呢?- 現在就做,以后會有價值的。

      不要低估自己的能力,如果你認為自己能力不足,要知道你會提高的。走出去,一小步一小步地建設能帶來價值的項目。

      祝你在工程學的道路上一帆風順。

      作者:Lev Nahar

      譯文:前端寶哥

      原文:https://dev.to/lnahrf/javascript-proxy-magic-how-i-built-a-2kb-state-manager-with-zero-dependencies-and-how-it-got-me-two-different-job-offers-2539

      關注我

      如果喜歡我的分享,點擊下方關注,文末點一個贊 ?? ?分享 是對我最大的支持

      我的微信公眾號:前端開發博客,在后臺回復以下關鍵字可以獲取資源。

      • 回復「小抄」,領取Vue、JavaScript 和 WebComponent 小抄 PDF

      • 回復「Vue腦圖」獲取 Vue 相關腦圖

      • 回復「思維圖」獲取 JavaScript 相關思維圖

      • 回復「簡歷」獲取簡歷制作建議

      • 回復「簡歷模板」獲取精選的簡歷模板

      • 回復「加群」進入500人前端精英群

      • 回復「電子書」下載我整理的大量前端資源,含面試、Vue實戰項目、CSS和JavaScript電子書等。

      • 回復「知識點」下載高清JavaScript知識點圖譜

      posted @ 2023-11-16 21:56  前端博客  閱讀(44)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 成人伊人青草久久综合网| 国产精品入口麻豆| 国产精品播放一区二区三区| 亚洲精品久久久久久下一站| 亚洲中文字幕一区二区| 免费专区丝袜调教视频| 熟女蜜臀av麻豆一区二区| 67194熟妇在线观看线路| 无码里番纯肉h在线网站| 国产精品一区二区在线蜜芽tv| 国产毛1卡2卡3卡4卡免费观看| 国产睡熟迷奷系列网站| 亚洲AV成人片在线观看| 中文字幕国产精品资源| 中文字幕国产精品资源| 国产精品黄色精品黄色大片| 亚洲va中文字幕无码久久不卡| 久久夜色精品国产亚洲a| 非会员区试看120秒6次| 国产av一区二区亚洲精品| 欧美乱码伦视频免费| 亚洲av第二区国产精品| 国语精品一区二区三区| 亚洲大尺度无码专区尤物| 漂亮的保姆hd完整版免费韩国| 久播影院无码中文字幕| 日本亚洲欧洲免费无线码| 国产精品亚洲一区二区三区喷水| 116美女极品a级毛片 | 亚洲天堂网中文在线资源| 极品尤物被啪到呻吟喷水| 这里只有精品免费视频| 日本一区二区精品色超碰| 国产999久久高清免费观看| 宅男噜噜噜66在线观看| 亚洲欧美日韩在线不卡| 国产农村激情免费专区| 99久久精品国产综合一区| 国产三级精品福利久久| 色欲av亚洲一区无码少妇| 精品一区二区三区免费视频|