edux的作者是誰?Dan,他的全稱叫做Dan Abramov,同時他也是React的核心成員之一
為什么我標(biāo)題說Dan字節(jié)一面掛了呢?
因為昨天晚上字節(jié)的web infra團(tuán)隊連線了遠(yuǎn)在國外的Dan,并且提前收集了200多個網(wǎng)友的問題,從中精選了20幾個,讓Dan來給一一解答,在其中一個問題的回答中,Dan說他從來沒用過Vue,hhhhh,所以有小伙伴就說搞了個段子
開場就是Dan的自我介紹(他竟然12歲就開始編程了,好家伙,這到22歲不直接有10年編程經(jīng)驗了?
Q1: 如何看待redux
我不會推薦任何一個庫,要看使用場景吧。比如針對數(shù)據(jù)和緩存的庫,就該用對應(yīng)的庫
Q2: 很多開發(fā)者認(rèn)為react的入門很難,有沒有什么快速上手的方法
我認(rèn)為這取決于大家為什么認(rèn)為React難,可能難點不同,因為你剛學(xué)javascript,這是你的入門,那就會覺得React很難。對于其它庫例如Vue,你可以運(yùn)用一些已經(jīng)封裝好的方法,慢慢的使用中你可以學(xué)會一些東西。而react你一上手就要編程,這就是難點所在。如果有人覺得入門很難的話,可能就意味著他們不知道怎么去做一個單頁的應(yīng)用程序,可能不是react本身的問題,但他們會認(rèn)為是react難以理解的問題??梢韵劝裫avascript熟悉了,再來用React肯定就很容易了。
Q3: 對于已經(jīng)開始用react的人,給一些建議避坑
很重要的一點就是你要用Hook的話,我們推薦使用正確的方法把他們引入你的項目當(dāng)中。對于react來說有兩點,一點是可模仿性,新手可以去學(xué)別人的庫,參考著去學(xué)習(xí)。另一點就是對于react渲染來說,你可以把他想成是一個計算,你不需要做很多工作,你只需要返回你需要的react UI即可,這很重要
Q4: 現(xiàn)在react更多關(guān)注的是函數(shù)編程,js卻不是這樣的
我認(rèn)為react的確比其它工具更加偏向于函數(shù),但真正喜歡函數(shù)編程的開發(fā)者會認(rèn)為react并不是一個函數(shù)編程的工具。我們也不會把組件分解成一個個很小很小的函數(shù)。React其實是借用了一些函數(shù)的理念,并且基于函數(shù),但不完完全全是一個函數(shù)編程工具
Q5: 現(xiàn)在前端發(fā)展迅速,你是怎么跟上技術(shù)發(fā)展速度的
我不是這樣想的,但有可能是我沒有跟緊潮流,可能是每隔幾年就有這樣的趨勢,但很多像現(xiàn)在的新技術(shù)跟以前的技術(shù)概念其實很相似,這種情況下,我不會被這種新興的技術(shù)驚到,因為他們對我來說沒有什么太大的不同,所以這其實就是對老事物一種新的理解,我們圍繞一些基本概念做一些開發(fā)而已。
Q6: react在未來如何進(jìn)步呢?
你認(rèn)為現(xiàn)在存在哪些重大的問題呢?對我來說我會注意到很多問題都是不同的,不同的問題用不同的手段去解決,其中一個問題比如說,動畫領(lǐng)域我們還沒有涉足,很多ui框架會針對一些不同的問題提供一些解決方案,我的感覺是這些領(lǐng)域看起來不一樣,但其實都類似,我們可以互相結(jié)合。以后我們可能會有一個組件工具,或者提供更多的功能,這些功能是緊密結(jié)合的,這是我們希望的。
Q7: Concurrent mode,從18版本開始最新被放出來的模式,設(shè)計時面臨的挑戰(zhàn)有哪些?
我想說當(dāng)前還沒有被發(fā)行出來,所以我們可以去官網(wǎng)看一下blog,上面有關(guān)于版本18更多的信息,關(guān)于他有什么內(nèi)容,信息等等。我們現(xiàn)在有相關(guān)的工作小組,并且每天從社區(qū)邀請50個人左右?guī)臀覀円黄鸷献魅グl(fā)行18版本,保證整個生態(tài)系統(tǒng)和他發(fā)行的版本是一致的,我們在這方面已經(jīng)有了很多的討論,大家都可以閱讀,評論,獲取更多的信息。我們所做出來的一個大的改變就是我們沒有mode了,它不叫concurrent mode,而負(fù)責(zé)的是render的一種機(jī)制,他不會有一個延長等待的時間,比如你如果有輸入,他也可以同步的處理,其實他是一種同步多線的處理,這也是我們一直想攻克的難關(guān)。這才有了我們現(xiàn)在的18 Alpha版本。
Q8: 很多人會將react跟vue做對比,你是怎么看待這兩個框架的?
我自己沒用過vue的(what???React核心成員之一竟然沒有用過Vue,此處@尤大),所以沒法做很細(xì)節(jié)和全面的對比,從設(shè)計方法上來說,我們存在一些區(qū)別,比如vue直接改變狀態(tài),這有一些好處,你可以隨心所欲的想寫代碼就寫代碼,很多人都很喜歡這樣的方式,但對于我們來說,我們會做一些transition,我們方式不一樣,所以從技術(shù)來說我們有很大的差異,是兩種完全不同的方向。vue可能是基于50年的編程的沉淀,對于我們來說基于我們自己的做法,當(dāng)然他們的做法在技術(shù)上來說也是很棒的,vue更多會用一些實用的技術(shù)解決實用的問題,比如提供更加便利的動畫的解決方案,更便利的模板,但對于react來說,我們不想去做一些我們沒有辦法充分相信的解決方案,所以我們給出的東西可能沒有那么直接便利,比如我們想做動畫功能的話,我們并不會去標(biāo)準(zhǔn)化一些存在的東西,我們會有自己對于動畫的想法,這跟現(xiàn)在很多框架都是不一樣的,vue可以更快的拿到你所想要的,但react我們有更豐富的庫,你就可以學(xué)會怎么去做這些事,這就像安卓和ios一樣,ios其實很多功能都不包括的,但是他可以幫助你可以更好的完成一些事情。
Q9: vue3停止用flow了,react還用flow?
我并不認(rèn)為這是一個很關(guān)鍵的問題,我認(rèn)為這主要取決于庫本身是怎么寫的。他更多的是關(guān)注框架本身如何建立的,跟用戶沒啥關(guān)系,他并不會影響用戶使用react的過程,我們并不在意這個點,我們并不是不能改變,只是不太值得
Q10: 你對一些新框架有什么看法,他們都沒有使用vdom
我并沒有多么細(xì)致的使用過這些工具,沒有什么深度的見解,的確有很多的設(shè)計他們是很棒的,而且大家都走的不同的路,可能是完全相反,對于vdom這個詞我不太喜歡,大家理解都不太一樣,我認(rèn)為這個跟性能沒什么關(guān)系,我不太使用這個稱呼,因為這使人很困惑,他指的是UI的內(nèi)存,我們想讓他保留下來,因為他能給我們更多的選擇。對于一些復(fù)雜的功能,我們的解決方式可能會使用UI的不同版本,比如最左邊是0%,右邊是100%,中間會有一個滾動條,在調(diào)整滾動條只需要調(diào)整幀就好了,我們?nèi)绾萎a(chǎn)生這種幀,就需要很多的ui進(jìn)行協(xié)助,這就需要vdom的協(xié)助,這和性能的關(guān)系不大。假設(shè)我們要看整個app的性能,需要看你每個組件的功能是什么,他可以做什么,看看app背后的代碼是什么,而不是單純對幾行的代碼做分析和解讀。
Q11: 目前用的大多是vue和react,你對于前端來說如何看待五年后的前端領(lǐng)域
我對這個問題的理解是,ui代碼有很多不同的方式,比如放在服務(wù)器上還是客戶端上,如何去整理它,那我覺得在這方面 框架也可以解決所有的問題,我覺得next.js是可以把react相關(guān)的觀念去簡化,所以他有可能會取代目前的功能,如果大家對Server Component 感興趣的話,你的思考模式是圍繞組件進(jìn)行的,這是可控的,那你也可以做出自主的決定,吧什么樣的組件在服務(wù)器去運(yùn)轉(zhuǎn),不會占用你太長的時間,代碼也是一樣的,他們會更加的清晰,你就不需要去思考你是在做渲染還是做別的事情,這是一種很不錯的優(yōu)化。
Q12: 對于找工作的同學(xué)來說,什么樣的科技公司更吸引人?
我覺得你身邊的人比較厲害,你能學(xué)到很多東西,這是良性的工作環(huán)境,可以學(xué)習(xí)新的知識,而且還需要你的自主性會比較強(qiáng),不能命令式的工作(其實當(dāng)時彈幕里全是一個字:錢??!)
Q13: 說說你的個人經(jīng)歷,你剛加入Facebook,如何學(xué)習(xí)react的相關(guān)知識的
react代碼其實比較復(fù)雜,在最開始需要研究代碼,去熟悉,主要還是去了解整個的架構(gòu),把它了解透徹了沒問題了,就Ok了。還會給一些人提供幫助,我會在一些公開的平臺上幫助別人解決問題,回答他們的問題,在那段時間閱讀了各種人提出的問題,幾千條,這是一個非常好的方法幫我熟悉自己所做的東西,幫他們解決問題,也對自己有幫助。
Q14: react核心團(tuán)隊或社區(qū)如何維護(hù)這么大的code
我們遇到很多有趣的挑戰(zhàn),我并不認(rèn)為我們的code很大,我們也是在慢慢的學(xué)習(xí)如何運(yùn)行這樣的項目,我們有超過5000次的測試。react用戶只會用來rendering,不會深入到我們庫里。如果你去看我們的代碼,我們可能會有一個老js和新Js(即源碼文件中以。old.js或。new.js為結(jié)尾的文件),他們基本上是相同的,我們這么做是為了應(yīng)對一些有風(fēng)險的改變,我們沒有看到回歸,我們就會把新的改變復(fù)制到舊的當(dāng)中,這聽起來很奇怪,但效果還不錯。
我認(rèn)為Facebook就像一個測試機(jī)器一樣,我們會在工作中驗證,我們看到了百分之一的回歸,評論下降了1%,我們就花了一個月對各個組件做實驗區(qū)檢測,發(fā)現(xiàn)了一個bug并解決了。即使當(dāng)時下降了1%,但是對于Facebook來說是一個很大的損失。
Q15: 作為react用戶,我們?nèi)タ丛创a,是不是一個好的做法
我并不認(rèn)為很有必要,因為很難去理解我們的源碼,如果你直接去讀,你可能會很困惑,因為你不了解底層的框架,有人跟你解釋一下可能更好一些。我經(jīng)常做的一件事,就是用一個debugger去看這些代碼不同的去向,比如在chrome performance里看到函數(shù)代碼的棧,你可以看到每一個函數(shù)發(fā)生的不同的事情,比如你在升級的時候就可以看到一些新的事件和功能,所以可以從性能這個方面看到這些基本的功能的目的是什么
Q16: 你是如何保持對react的熱情的
我本身就很喜歡,react理念跟我對ui代碼的想法很一致,我在facebook之前,在初創(chuàng)公司,當(dāng)時直接用了react,當(dāng)時不流行,但給我們工作帶來了很大的便利,我們還可以清楚地看到各個功能的狀態(tài),我們經(jīng)常問自己想在屏幕上看到的功能是什么,react就能解決當(dāng)下這個問題
Q17: 如何像你一樣優(yōu)秀,前端好的學(xué)習(xí)資源分享
我并不確定我有多么優(yōu)秀,如果你認(rèn)為優(yōu)秀可以做一個非常好看的app,那我并不是,所以說我并不是很確定大家想聽到什么樣的建議。
建議的話,我覺得你可以不用vue或react這樣的框架去寫一些ui框架,或者做一些小游戲,比如貪吃蛇,這樣去促使你去做,即使他有一些復(fù)雜度,但能從中吸取一些經(jīng)驗。
Q18: 休閑時間會做什么呢?
偶爾玩玩堡壘之夜,但是也很久沒玩游戲了,平時就聽聽歌、散散步
Q19: 對于中國開發(fā)者的建議
我覺得我不太確定一些事,我不知道react在中國多少人在用,在這個社區(qū)里,大家可以有不同的選擇,非常感謝他們在翻譯上做出的工作(此處@印記中文),我不太確定react在未來能否風(fēng)靡中國,希望大家去多推薦一下react,讓更多人了解到,我們將來做出更多的改變。
Q20: 未來是否愿意會在中國的react社區(qū)更多得活躍一下
必須滴!
最后辛苦Dan啦,全程一個半小時一直在解答大家的問題,一口水都沒喝。而且他回答問題都回答得非常詳細(xì),都盡可能地多說一些,所以遠(yuǎn)不止我記錄的那么點文字,真的是很有愛了~ 期待下一次Dan與國內(nèi)程序員的互動!!!也感謝 Web infra 團(tuán)隊提供的這次機(jī)會