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