大家好,我是若川,誠邀你進群交流學習。今天分享一次直播的記錄。我寫過redux源碼文章。動手按照文中例子學習,我相信會有所收獲。學習源碼系列、面試、年度總結、JS基礎系列
redux的作者是誰?Dan,他的全稱叫做Dan Abramov,同時他也是React的核心成員之一
為什么我標題說Dan字節一面掛了呢?
因為昨天晚上字節的web infra團隊連線了遠在國外的Dan,并且提前收集了200多個網友的問題,從中精選了20幾個,讓Dan來給一一解答,在其中一個問題的回答中,Dan說他從來沒用過Vue,hhhhh,所以有小伙伴就說搞了個段子

開場就是Dan的自我介紹(他竟然12歲就開始編程了,好家伙,這到22歲不直接有10年編程經驗了?hhhh),然后就是接下來一系列的問題
Q1: 如何看待redux
我不會推薦任何一個庫,要看使用場景吧。比如針對數據和緩存的庫,就該用對應的庫
Q2: 很多開發者認為react的入門很難,有沒有什么快速上手的方法
我認為這取決于大家為什么認為React難,可能難點不同,因為你剛學javascript,這是你的入門,那就會覺得React很難。對于其它庫例如Vue,你可以運用一些已經封裝好的方法,慢慢的使用中你可以學會一些東西。而react你一上手就要編程,這就是難點所在。如果有人覺得入門很難的話,可能就意味著他們不知道怎么去做一個單頁的應用程序,可能不是react本身的問題,但他們會認為是react難以理解的問題。可以先把javascript熟悉了,再來用React肯定就很容易了。
Q3: 對于已經開始用react的人,給一些建議避坑
很重要的一點就是你要用Hook的話,我們推薦使用正確的方法把他們引入你的項目當中。對于react來說有兩點,一點是可模仿性,新手可以去學別人的庫,參考著去學習。另一點就是對于react渲染來說,你可以把他想成是一個計算,你不需要做很多工作,你只需要返回你需要的react UI即可,這很重要
Q4: 現在react更多關注的是函數編程,js卻不是這樣的
我認為react的確比其它工具更加偏向于函數,但真正喜歡函數編程的開發者會認為react并不是一個函數編程的工具。我們也不會把組件分解成一個個很小很小的函數。React其實是借用了一些函數的理念,并且基于函數,但不完完全全是一個函數編程工具
Q5: 現在前端發展迅速,你是怎么跟上技術發展速度的
我不是這樣想的,但有可能是我沒有跟緊潮流,可能是每隔幾年就有這樣的趨勢,但很多像現在的新技術跟以前的技術概念其實很相似,這種情況下,我不會被這種新興的技術驚到,因為他們對我來說沒有什么太大的不同,所以這其實就是對老事物一種新的理解,我們圍繞一些基本概念做一些開發而已(咳咳,既凡爾賽,又有道理)
Q6: react在未來如何進步呢?
你認為現在存在哪些重大的問題呢?對我來說我會注意到很多問題都是不同的,不同的問題用不同的手段去解決,其中一個問題比如說,
動畫領域我們還沒有涉足,很多ui框架會針對一些不同的問題提供一些解決方案,我的感覺是這些領域看起來不一樣,但其實都類似,我們可以互相結合。以后我們可能會有一個組件工具,或者提供更多的功能,這些功能是緊密結合的,這是我們希望的。
Q7: Concurrent mode,從18版本開始最新被放出來的模式,設計時面臨的挑戰有哪些
我想說當前還沒有被發行出來,所以我們可以去官網看一下blog,上面有關于版本18更多的信息,關于他有什么內容,信息等等。我們現在有相關的工作小組,并且每天從社區邀請50個人左右幫我們一起合作去發行18版本,保證整個生態系統和他發行的版本是一致的,我們在這方面已經有了很多的討論,大家都可以閱讀,評論,獲取更多的信息。我們所做出來的一個大的改變就是我們沒有mode了,它不叫concurrent mode,而負責的是render的一種機制,他不會有一個延長等待的時間,比如你如果有輸入,他也可以同步的處理,其實他是一種同步多線的處理,這也是我們一直想攻克的難關。這才有了我們現在的18 Alpha版本
Q8: 很多人會將react跟vue做對比,你是怎么看待這兩個框架的
我自己沒用過vue的(what???React核心成員之一竟然沒有用過Vue,此處@尤大),所以沒法做很細節和全面的對比,從設計方法上來說,我們存在一些區別,比如vue直接改變狀態,這有一些好處,你可以隨心所欲的想寫代碼就寫代碼,很多人都很喜歡這樣的方式,但對于我們來說,我們會做一些transition,我們方式不一樣,所以從技術來說我們有很大的差異,是兩種完全不同的方向。vue可能是基于50年的編程的沉淀,對于我們來說基于我們自己的做法,當然他們的做法在技術上來說也是很棒的,vue更多會用一些實用的技術解決實用的問題,比如提供更加便利的動畫的解決方案,更便利的模板,但對于react來說,我們不想去做一些我們沒有辦法充分相信的解決方案,所以我們給出的東西可能沒有那么直接便利,比如我們想做動畫功能的話,我們并不會去標準化一些存在的東西,我們會有自己對于動畫的想法,這跟現在很多框架都是不一樣的,vue可以更快的拿到你所想要的,但react我們有更豐富的庫,你就可以學會怎么去做這些事,這就像安卓和ios一樣,ios其實很多功能都不包括的,但是他可以幫助你可以更好的完成一些事情。
Q9: vue3停止用flow了,react還用flow?
我并不認為這是一個很關鍵的問題,我認為這主要取決于庫本身是怎么寫的。他更多的是關注框架本身如何建立的,跟用戶沒啥關系,他并不會影響用戶使用react的過程,我們并不在意這個點,我們并不是不能改變,只是不太值得
Q10: 你對一些新框架有什么看法,他們都沒有使用vdom
我并沒有多么細致的使用過這些工具,沒有什么深度的見解,的確有很多的設計他們是很棒的,而且大家都走的不同的路,可能是完全相反,對于vdom這個詞我不太喜歡,大家理解都不太一樣,我認為這個跟性能沒什么關系,我不太使用這個稱呼,因為這使人很困惑,他指的是UI的內存,我們想讓他保留下來,因為他能給我們更多的選擇。對于一些復雜的功能,我們的解決方式可能會使用UI的不同版本,比如最左邊是0%,右邊是100%,中間會有一個滾動條,在調整滾動條只需要調整幀就好了,我們如何產生這種幀,就需要很多的ui進行協助,這就需要vdom的協助,這和性能的關系不大。假設我們要看整個app的性能,需要看你每個組件的功能是什么,他可以做什么,看看app背后的代碼是什么,而不是單純對幾行的代碼做分析和解讀。
Q11: 目前用的大多是vue和react,你對于前端來說如何看待五年后的前端領域
我對這個問題的理解是,ui代碼有很多不同的方式,比如放在服務器上還是客戶端上,如何去整理它,那我覺得在這方面 框架也可以解決所有的問題,我覺得next.js是可以把react相關的觀念去簡化,所以他有可能會取代目前的功能,如果大家對Server Component 感興趣的話,你的思考模式是圍繞組件進行的,這是可控的,那你也可以做出自主的決定,吧什么樣的組件在服務器去運轉,不會占用你太長的時間,代碼也是一樣的,他們會更加的清晰,你就不需要去思考你是在做渲染還是做別的事情,這是一種很不錯的優化
Q12: 對于找工作的同學來說,什么樣的科技公司更吸引人?
我覺得你身邊的人比較厲害,你能學到很多東西,這是良性的工作環境,可以學習新的知識,而且還需要你的自主性會比較強,不能命令式的工作(其實當時彈幕里全是一個字:錢????!)
Q13: 說說你的個人經歷,你剛加入facebook,如何學習react的相關知識的
react代碼其實比較復雜,在最開始需要研究代碼,去熟悉,主要還是去了解整個的架構,把它了解透徹了沒問題了,就Ok了。還會給一些人提供幫助,我會在一些公開的平臺上幫助別人解決問題,回答他們的問題,在那段時間閱讀了各種人提出的問題,幾千條,這是一個非常好的方法幫我熟悉自己所做的東西,幫他們解決問題,也對自己有幫助。
Q14: react核心團隊或社區如何維護這么大的code
我們遇到很多有趣的挑戰,我并不認為我們的code很大,我們也是在慢慢的學習如何運行這樣的項目,我們有超過5000次的測試。react用戶只會用來rendering,不會深入到我們庫里。如果你去看我們的代碼,我們可能會有一個老js和新Js(即源碼文件中以.old.js或.new.js為結尾的文件),他們基本上是相同的,我們這么做是為了應對一些有風險的改變,我們沒有看到回歸,我們就會把新的改變復制到舊的當中,這聽起來很奇怪,但效果還不錯。
我認為facebook就像一個測試機器一樣,我們會在工作中驗證,我們看到了百分之一的回歸,評論下降了1%,我們就花了一個月對各個組件做實驗區檢測,發現了一個bug并解決了。即使當時下降了1%,但是對于facebook來說是一個很大的損失。
Q15: 作為react用戶,我們去看源碼,是不是一個好的做法
我并不認為很有必要,因為很難去理解我們的源碼,如果你直接去讀,你可能會很困惑,因為你不了解底層的框架,有人跟你解釋一下可能更好一些。我經常做的一件事,就是用一個debugger去看這些代碼不同的去向,比如在chrome performance里看到函數代碼的棧,你可以看到每一個函數發生的不同的事情,比如你在升級的時候就可以看到一些新的事件和功能,所以可以從性能這個方面看到這些基本的功能的目的是什么
Q16: 你是如何保持對react的熱情的
我本身就很喜歡,react理念跟我對ui代碼的想法很一致,我在facebook之前,在初創公司,當時直接用了react,當時不流行,但給我們工作帶來了很大的便利,我們還可以清楚地看到各個功能的狀態,我們經常問自己想在屏幕上看到的功能是什么,react就能解決當下這個問題
Q17: 如何像你一樣優秀,前端好的學習資源分享
我并不確定我有多么優秀,如果你認為優秀可以做一個非常好看的app,那我并不是,所以說我并不是很確定大家想聽到什么樣的建議。
建議的話,我覺得你可以不用vue或react這樣的框架去寫一些ui框架,或者做一些小游戲,比如貪吃蛇,這樣去促使你去做,即使他有一些復雜度,但能從中吸取一些經驗
Q18: 休閑時間會做什么呢
偶爾玩玩堡壘之夜,但是也很久沒玩游戲了,平時就聽聽歌、散散步
Q19: 對于中國開發者的建議
我覺得我不太確定一些事,我不知道react在中國多少人在用,在這個社區里,大家可以有不同的選擇,非常感謝他們在翻譯上做出的工作(此處@印記中文),我不太確定react在未來能否風靡中國,希望大家去多推薦一下react,讓更多人了解到,我們將來做出更多的改變
Q20: 未來是否愿意會在中國的react社區更多得活躍一下
必須滴!
最后辛苦Dan啦,全程一個半小時一直在解答大家的問題,一口水都沒喝。而且他回答問題都回答得非常詳細,都盡可能地多說一些,所以遠不止我記錄的那么點文字,真的是很有愛了~ 期待下一次Dan與國內程序員的互動!!!也感謝 Web infra 團隊提供的這次機會
最近組建了一個江西人的前端交流群,如果你是江西人可以加我微信?ruochuan12?私信 江西 拉你進群。
推薦閱讀
我在阿里招前端,該怎么幫你(可進面試群)
畢業年限不長的前端焦慮和突破方法
前端搶飯碗系列之Vue項目如何做單元測試
前端使用puppeteer 爬蟲生成《React.js 小書》PDF并合并
·················?若川簡介?·················
你好,我是若川,畢業于江西高校。現在是一名前端開發“工程師”。寫有《學習源碼整體架構系列》多篇,在知乎、掘金收獲超百萬閱讀。
從2014年起,每年都會寫一篇年度總結,已經寫了7篇,點擊查看年度總結。
同時,活躍在知乎@若川,掘金@若川。致力于分享前端開發經驗,愿景:幫助5年內前端人走向前列。
點擊上方卡片關注我、加個星標
今日話題
略。歡迎分享、收藏、點贊、在看我的公眾號文章~