自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

19個(gè)來(lái)自2019 React Conf的總結(jié)

開(kāi)發(fā) 前端
這篇文章收錄了一些這次 React Conf 中,我最喜歡的總結(jié)。每一個(gè)主題都值得關(guān)注。

[[282171]]

React Conf ⚛️已經(jīng)正式結(jié)束。有很多精彩的演講,人物,活動(dòng),當(dāng)然還有美食。我還在整理整個(gè)活動(dòng),但是就這次會(huì)議而言,這是迄今為止我參加過(guò)的最好的活動(dòng)。

開(kāi)發(fā)者對(duì)于社區(qū)通常都會(huì)保持一顆敬畏之心。大會(huì)的志愿者和組織者完成了難以想象的工作,使得每一個(gè)參加會(huì)議的人都感到賓至如歸。他們的努力使得我們每個(gè)人都有一種歸屬感,這給我留下深刻的印象。第二天,甚至還會(huì)有一些內(nèi)部的活動(dòng)。你是否想象過(guò)在會(huì)議上畫(huà)過(guò)小人像(想像下《戰(zhàn)錘》)?我現(xiàn)在有過(guò)了!因此,對(duì)于所有相關(guān)人員,謝謝!

這篇文章收錄了一些這次 React Conf 中,我最喜歡的總結(jié)。每一個(gè)主題都值得關(guān)注,所以我建議你看下 第一天 和 第二天 的視頻。我的文章底部為所有演講中的話(huà)題都添加了時(shí)間戳。

您可能會(huì)對(duì)列表中的某些項(xiàng)目感到驚訝。我也是!并非所有內(nèi)容都和技術(shù)相關(guān),但是會(huì)有一個(gè)貫穿始終的共同線程。

1. 服務(wù)于開(kāi)發(fā)者體驗(yàn)的用戶(hù)體驗(yàn)

在 湯姆·奧奇諾(Tom Occhino) 說(shuō)完之后,我迫不及待的陷入了想象中。所有談話(huà)中提到的畫(huà)面都出現(xiàn)在我的腦海。我意識(shí)到我非常喜歡開(kāi)發(fā)者工具和前端。

React 旨在創(chuàng)造一種開(kāi)發(fā)者體驗(yàn),使我們能夠更加輕松的學(xué)習(xí)并實(shí)現(xiàn)更加強(qiáng)大的功能,通過(guò)加快啟動(dòng)和迭代來(lái)提高生產(chǎn)力,以及提升我們開(kāi)發(fā)軟件的規(guī)模。這些事情使我像 React 一樣。我覺(jué)得 Facebook 在交付方面做得很好。

這一切有什么意義呢?好吧,簡(jiǎn)單來(lái)說(shuō)就是服務(wù)于用戶(hù)體驗(yàn)。我們做的所有事情,以便我們可以幫助用戶(hù)提升工作效率,我們應(yīng)該致力于幫助他們以更加優(yōu)雅的方式完成他們工作。我們幫助他們完成實(shí)現(xiàn)目標(biāo)的方式并非總是閉門(mén)造車(chē),而是多從用戶(hù)的角度考慮。

由于 React 的流行,63% 的 JavaScript 開(kāi)發(fā)者都在使用它,因此,團(tuán)隊(duì)非常重視社區(qū)之類(lèi)的事情。社區(qū)成員遵守 《參與者公約》 ,并提出批評(píng)。作為一個(gè)社區(qū),我們應(yīng)該能夠接受批評(píng)而不是單純?yōu)樽约哼M(jìn)行辯護(hù)。埃爾伯特·哈伯德(Elbert Hubbard)說(shuō):“為了避免批評(píng),什么都不說(shuō),什么都不做,就什么都不是。” React 在做的事情,以及原因很重要。這自然會(huì)引發(fā)爭(zhēng)議,但也會(huì)使得技術(shù)不斷進(jìn)步。這會(huì)讓我們的社區(qū)變得越來(lái)越好。

2.令人驚嘆的易用性,性能以及并發(fā)模式!

你在使用 React 的時(shí)候,是否處理過(guò)焦點(diǎn)的問(wèn)題?我有。焦點(diǎn)確實(shí)很重要 有很多原因。它可以幫助人們?yōu)g覽頁(yè)面。這對(duì)于不使用鼠標(biāo)的人來(lái)說(shuō),非常重要。這個(gè)話(huà)題稍后會(huì)再次提起,但是很高興看到 React 團(tuán)隊(duì)讓焦點(diǎn)可訪問(wèn)。

會(huì)議期間讓我思考最多的事情之一就是性能。Facebook 必須處理我們大部分人可能永遠(yuǎn)都不會(huì)遇到的性能問(wèn)題。但是他們從這些教訓(xùn)中所學(xué)到的知識(shí)同樣可以用來(lái)改善用戶(hù)體驗(yàn)。如果性能很慢,則頁(yè)面加載速度并不重要。

這方面的的一個(gè)例子就是鄭玉芝談話(huà)中提到的選擇混合 。你可能也聽(tīng)說(shuō)過(guò) Suspense,這些都將改善整個(gè) Web 上的用戶(hù)體驗(yàn)。

并發(fā)模式

想象一下,使用 React 做一個(gè)根據(jù)用戶(hù)輸入而改變的可過(guò)濾列表。你必須使用節(jié)流或者防抖進(jìn)行優(yōu)化,除非你不在意性能。

并發(fā)模式 將使 React 能夠?qū)Φ蛢?yōu)先級(jí)的工作中斷響應(yīng),從而使得 React 應(yīng)用程序具備更高的響應(yīng)速度。這使得用戶(hù)輸入之類(lèi)的事情,比重新渲染列表之類(lèi)的事情具備更高的優(yōu)先級(jí)。React 可以使得幾個(gè)工作中的狀態(tài)同時(shí)更新。這將幫助我們消除抖動(dòng)以及過(guò)于頻繁的 DOM 更新。它還將使我們能夠優(yōu)先處理諸如懸停和文本輸入之類(lèi)的交互。我們知道用戶(hù)希望這些內(nèi)容能夠快速的被處理,否則,他們會(huì)感到遲鈍。

React 團(tuán)隊(duì)分享了許多關(guān)于并發(fā)模式的示例 ,我建議您查看一下。

3. CSS-in-JS-at-FB

對(duì)于 Frank Yan 宣布 Facebook 正在構(gòu)建自己的 CSS-in-JS 庫(kù),我很感興趣。起初我以為,我們目前的庫(kù)還不夠嗎?這使我們有機(jī)會(huì)進(jìn)一步了解 Facebook 大規(guī)模面臨的一些問(wèn)題,以及他們解決問(wèn)題創(chuàng)造性的方式。

維護(hù) CSS 很快就會(huì)失去控制。讓我們看下面的例子: 

  1. .blue { color: blue; }  
  2. .red { color: red; }  
  1. // 展示為紅色  
  2. <span class="red blue">  
  3.   Which color will I be?  
  4. </span> 

在此示例中,我們希望如果文本看到文本是 blue。因?yàn)樗帕性陬?lèi)聲明的第二位,因此我們希望它應(yīng)該具有優(yōu)先權(quán)。但是事實(shí)并非如此。.red 排列在樣式表的第二位,所以會(huì)優(yōu)先展示為紅色。如果這些位于不同的樣式表之中,則他們?cè)陧?yè)面中的加載順序?qū)⒑苤匾?/p>

這個(gè)例子雖然很 “幼稚”,例子看起來(lái)也很簡(jiǎn)單,但是很快就會(huì)失控。Facebook 旨在通過(guò)新的類(lèi)庫(kù)來(lái)解決諸如特異性戰(zhàn)爭(zhēng),主題化和可訪問(wèn)性之類(lèi)的問(wèn)題。

演講中的一些有趣的細(xì)節(jié):

  •  開(kāi)發(fā)人員可以以像素為單位進(jìn)行編碼,但是其工作可以在 REM 中進(jìn)行編譯。
  •  他們通過(guò)執(zhí)行類(lèi)型檢查(捕獲和修復(fù)錯(cuò)別字,檢測(cè)并刪除未使用的樣式。避免跨瀏覽器的陷阱)來(lái)創(chuàng)造安全性。
  •  向開(kāi)發(fā)人員展示可訪問(wèn)性的錯(cuò)誤。

  •  組件具有默認(rèn)樣式,并且可以被覆蓋(包括類(lèi)型安全?。?/li>
  •  重復(fù)規(guī)則校驗(yàn),減少 CSS 文件體積(Facebook 在最近的重構(gòu)中,將文件從 413kb 改寫(xiě)為 74kb)

原子 CSS

每個(gè)類(lèi)的創(chuàng)建都僅有一個(gè)唯一的屬性值對(duì)。這用于優(yōu)化組件 

  1. .c0 { color: blue; }  
  2. .c1 { color: red; }  
  3. .c2 { font-size: 16px; }  
  4. //生成的組件(預(yù)先優(yōu)化)  
  5. // Generated Component (Pre-Optimized)  
  6. const styles = {  
  7.   blue: {color: 'c0'},  
  8.   default: {color: 'c1', fontSize: 'c2'},  
  9. };  
  10. function MyComponent(props) {  
  11.   return (  
  12.     <span className={styles(  
  13.       'default',  
  14.       props.isBlue && 'blue',  
  15.     )}>  
  16.       Hello World!  
  17.     </span>  
  18.   );  

這個(gè)例子展示了 CSS 的原子性。它還展示了如何使用 props 來(lái)設(shè)置 span 標(biāo)簽的顏色。但是,此代碼可以得到進(jìn)一步優(yōu)化。 

  1. // 不再需要樣式塊  
  2. function MyComponent(props) {  
  3.   return (  
  4.     <span className={styles(  
  5.       (props.isBlue ? 'c0 ' : 'c1 ') + 'c2 '  
  6.     )}>  
  7.       Hello World!  
  8.     </span>  
  9.   );  

這些事情非常有趣,我期待著將來(lái)它們的庫(kù)被發(fā)布。

4.數(shù)據(jù)驅(qū)動(dòng)的JavaScript

您是否曾經(jīng)想過(guò)如何使頁(yè)面感覺(jué)更快?早點(diǎn)互動(dòng)?當(dāng)然有!阿什利·沃特金斯(Ashley Watkins)同樣做到了。她真的讓我在思考如何調(diào)整數(shù)據(jù)獲取的方法來(lái)改善用戶(hù)體驗(yàn)。我已經(jīng)開(kāi)始對(duì) Relay 感興趣,但她讓這種感覺(jué)持續(xù)升級(jí)。

分階段代碼分割

您應(yīng)該可以猜到,F(xiàn)acebook 的工程師一直在努力確保他們的 FMP(首次有效繪制) 盡可能的快速。他們執(zhí)行此操作的方法之一就是“分階段進(jìn)行代碼拆分”。

使用這種方法,您可以進(jìn)行一次阻止下載并分階段交付。例如,如果您參考 Facebook 的方式,則可以將其分為三個(gè)階段。

  •  1.載入中
  •  2.顯示
  •  3.分析工具

這些階段中的每一個(gè)階段都可以有自己的代碼獲取以及渲染。FMP 所需的所有數(shù)據(jù)都可以在加載階段獲取其他代碼的同時(shí)獲取。

 

到第一個(gè)有意義的畫(huà)面的時(shí)間

為了使您的用戶(hù)體驗(yàn)達(dá)到最佳狀態(tài),您應(yīng)該考慮首屏加載時(shí)間?;旧?,這是主要內(nèi)容顯示在頁(yè)面上的時(shí)間。您可以查看和衡量許多指標(biāo)以縮短加載時(shí)間,但是 FMP 還是很顯眼。

Relay 允許您使用 GraphQL 進(jìn)行流式查詢(xún)。這將使您可以將某些數(shù)據(jù)標(biāo)記為關(guān)鍵數(shù)據(jù),而將其他數(shù)據(jù)標(biāo)記為非關(guān)鍵數(shù)據(jù)。然后,您可以首先從服務(wù)器獲取最重要的內(nèi)容,并在獲取其余數(shù)據(jù)的同時(shí)進(jìn)行顯示。使用這種方法,您可以在內(nèi)容到達(dá)時(shí),再對(duì)其進(jìn)行渲染!

數(shù)據(jù)驅(qū)動(dòng)的代碼分割

這個(gè)讓我有些震驚。Relay 功能強(qiáng)大,這毫無(wú)疑問(wèn)。Relay 具有一項(xiàng)新功能,可讓您擴(kuò)展查詢(xún)條件以表達(dá)需要呈現(xiàn)特定數(shù)據(jù)類(lèi)型所需的組件代碼。🤯 您可以將代碼視為數(shù)據(jù)。當(dāng)服務(wù)器解析您的 GraphQL 查詢(xún)時(shí),它可以讓客戶(hù)端知道需要下載哪些組件代碼,以便更快地獲取它!

阿什利的演講令人感到難以置信,但她保證這些事情僅僅是個(gè)開(kāi)始。我還沒(méi)有使用過(guò) Relay,但我很高興開(kāi)始使用它,我敢打賭,您也會(huì)這樣做(尤其是當(dāng)您聽(tīng)到更多有關(guān)它可以做什么的信息時(shí))。

5.解決世界的饑餓

第一天的開(kāi)始主要來(lái)自 Facebook 工作人員的大量演講。從技術(shù)的角度,這是令人興奮的。我們看到生態(tài)系統(tǒng)中有許多即將發(fā)布的功能,以幫助我們改善用戶(hù)體驗(yàn)。

Tania Papazafeiropoulou 稍微調(diào)整了話(huà)題,以向參會(huì)者介紹世界饑餓和她正在研究的一種很酷的產(chǎn)品 OLIO。他可以幫助人們分享食物,而不是浪費(fèi)食物,而你猜不到它是由 React 所支持的。

發(fā)現(xiàn)有浪費(fèi)三分之一的食物被浪費(fèi)是令人沮喪的。重要的是,我們僅用來(lái)自美國(guó),英國(guó),歐洲的 25% 的食物就可以解決世界饑餓的問(wèn)題。這些清晰的數(shù)據(jù),使得解決世界饑餓問(wèn)題成為了可能,聽(tīng)到一個(gè)團(tuán)隊(duì)正在為這件事努力真的太棒了。

這次并沒(méi)有宣傳 React 的新功能,但是它使得 React 更加優(yōu)秀。React (和 React Native) 使得 Tania 的團(tuán)隊(duì)可以快速構(gòu)建他們的產(chǎn)品,并且產(chǎn)生積極地影響。

6.使 REST 更好(和更安全)

RESTful APIs 并不是一個(gè)新的熱門(mén)🔥的概念。它們于2000年正式被定義,自那時(shí)開(kāi)始已經(jīng)成功的投入使用。話(huà)雖如此,REST 確實(shí)有一些需要挑戰(zhàn)的東西。

Facebook 通過(guò) GraphQL 應(yīng)對(duì)了這些挑戰(zhàn)。GraphQL 為我們提供了對(duì)數(shù)據(jù)更加可理解的定義。它使客戶(hù)有能力僅獲得所需的東西。這是實(shí)現(xiàn)更快渲染時(shí)間的絕佳方法,因?yàn)槟槐叵螺d太多數(shù)據(jù)!

Tejas Kumar 很好地總結(jié)了差異(請(qǐng)觀看他的演講以便更深入地了解):

REST

  •  數(shù)據(jù)格式不規(guī)范
  •  猜謎游戲(如何判定一個(gè)失敗的請(qǐng)求,400,401,還是 404?)
  •  無(wú)意義的對(duì)話(huà)
  •  無(wú)合約協(xié)議

GraphQL

  •  規(guī)范的數(shù)據(jù)格式
  •  沒(méi)有猜謎游戲
  •  有意義的對(duì)話(huà)(由用戶(hù)定義)
  •  強(qiáng)力的合同協(xié)議

我們中的許多人都喜歡 GraphQL,但有時(shí)它不是 API 的選擇。Tejas和他的團(tuán)隊(duì)開(kāi)發(fā)了一種工具來(lái)消除 REST 的一些陷阱。它包括 Swagger 和 使用 OpenAPI 規(guī)范的生成代碼。

我不相信我會(huì)完全按照他說(shuō)的去做,但他的講話(huà)給我留下了持久的印象。講真地,去看他的演講!

7.React 的引擎(構(gòu)建自定義渲染器)

如果您曾經(jīng)演示過(guò)以前編寫(xiě)的代碼,則知道它經(jīng)常出錯(cuò)。蘇菲·阿爾珀特(Sophie Alpert) 構(gòu)建了 React 渲染器,并向我們傳遞這個(gè)過(guò)程所需要的知識(shí)。

我不認(rèn)為自己是一個(gè) React 專(zhuān)家(呵呵 😅)。我從沒(méi)看過(guò) React 代碼庫(kù)。我一直以為那將超越我。在我繼續(xù)學(xué)習(xí)和掌握 React 的過(guò)程中,我將繼續(xù)深入研究并最終進(jìn)入代碼庫(kù)本身。索菲(Sophie)在 React Conf 舞臺(tái)上實(shí)時(shí)構(gòu)建自己的自定義渲染時(shí),似乎沒(méi)有那么驚人。

除了向?qū)W習(xí) Sophie 的之外,我覺(jué)得自己對(duì) React 渲染器的工作原理只有一點(diǎn)了解。她沒(méi)有讓我撓頭。一切都簡(jiǎn)單地解釋?zhuān)⑶仪宄卣故玖顺鰜?lái)。還有什么比這更棒的呢?

愿演示之神永遠(yuǎn)喜歡 Sophie!

8.本地化(這太重要了?。?/strong>

作為一個(gè)以英語(yǔ)為母語(yǔ)的人,我必須承認(rèn),在開(kāi)發(fā)產(chǎn)品時(shí),我不會(huì)第一時(shí)間想到本地化。值得慶幸的是,我意識(shí)到了這一點(diǎn),并將在未來(lái)更加認(rèn)真地對(duì)待它。

我認(rèn)為本地化經(jīng)常會(huì)被忽視,因?yàn)槲覀儗?zhuān)注于像我們這樣的用戶(hù)。你的用戶(hù)都和你一樣,這是不現(xiàn)實(shí)的!這就是為什么我們需要進(jìn)行用戶(hù)測(cè)試,獲得用戶(hù)反饋,讓產(chǎn)品對(duì)所有類(lèi)型的用戶(hù),都更具包容性。

去年,納特·艾莉森(Nat Alison)提出了一個(gè)問(wèn)題“ React 是否被翻譯了?”。當(dāng)她最初提出這個(gè)問(wèn)題時(shí),答案是否定的。

為什么這么重要?恩,納特說(shuō)得很好。如果只有講英語(yǔ)的人可以訪問(wèn) React ,那么有多少人無(wú)法使用這些工具來(lái)開(kāi)發(fā)出令人贊嘆的產(chǎn)品?只讓說(shuō)英語(yǔ)的人構(gòu)建我們的數(shù)字世界,我們會(huì)損失多少?世界上只有20%的人口說(shuō)英語(yǔ)。如果我們不幫助別人使用 React,這將是我們自己的損失!

納特(Nat)和成千上萬(wàn)的人在過(guò)去一年中取得了令人難以置信的成就。還有更多工作要做,如果您會(huì)說(shuō)雙語(yǔ),希望您也可以提供幫助!

9.無(wú)障礙馬拉松

就像本地化一樣,可訪問(wèn)性可能很困難。在開(kāi)發(fā)可訪問(wèn)性時(shí),您必須以不同的方式思考。您必須考慮更多的受眾,考慮可能與您不同的人。有時(shí)候這很困難,但我們都能做到。

跑馬拉松🏃🏻‍♂️是另一個(gè)可能很困難的例子。根據(jù) RunRepeat 的統(tǒng)計(jì),2018年有 1,298,725 人完成了馬拉松比賽。他們并非是完全有能力才去做的。他們從小處著手,并努力達(dá)到目標(biāo)。

這就是我們處理可訪問(wèn)性的方法。如果您是從頭開(kāi)始,采取這種方法將消除一些不堪重負(fù)的感覺(jué)。我對(duì) React Conf 的最喜歡的事情之一就是從新的角度學(xué)習(xí)軟件開(kāi)發(fā)和世界。布列塔尼·費(fèi)恩斯特拉(Brittany Feenstra)是幫助我擴(kuò)大視野的人之一,我想進(jìn)一步思考無(wú)障礙環(huán)境。

我不會(huì)在一夜之間完成無(wú)障礙馬拉松比賽,但今后每天我可以做更多的事情。值得慶幸的是,在此過(guò)程中有很多優(yōu)秀的工具可以幫助我。

10.您不需要Redux(對(duì)嗎?)

2019年,有許多不同的方法來(lái)管理 React 狀態(tài)(甚至包括 easy-peasy)。

有這么多的選擇,很難知道什么才是正確的選擇。不幸的是,正確的選擇將取決于你自己。請(qǐng)記住,開(kāi)發(fā)人員體驗(yàn)是服務(wù)于用戶(hù)體驗(yàn)。知道了這一點(diǎn),我喜歡通過(guò)盡可能簡(jiǎn)單,并隨我的原始決定而改變的方式來(lái)進(jìn)行狀態(tài)管理。

我很高興 React 現(xiàn)在內(nèi)置了很多選項(xiàng)。使用 Context 和 Hooks ,您可以做很多事情而無(wú)需依賴(lài)其他依賴(lài)項(xiàng)。

為了快速行動(dòng)并完成目標(biāo),您必須愿意放棄以前完成的工作。當(dāng)您的產(chǎn)品與眾不同時(shí),您需要愛(ài)上重構(gòu)并推翻之前對(duì)您有用的決策。我認(rèn)為 React 狀態(tài)的許多選擇都反映了這一點(diǎn)。有些選項(xiàng)需要很多樣板,有些則不需要。有些是需要包裝的,有些不是?,F(xiàn)在選擇適合自己的感覺(jué),并在以后需要時(shí)進(jìn)行調(diào)整。

11.時(shí)間旅行到1999

當(dāng)天的最后一次演講讓我對(duì)標(biāo)題感到興趣。1999年編程是什么樣的?那時(shí)我才九歲。有些人從九歲開(kāi)始編碼。我不是其中之一。😢

這場(chǎng)談話(huà)是另一個(gè)確實(shí)需要關(guān)注的話(huà)題。李·拜倫(Lee Byron)提供了一顆精心打磨的寶石。在 PHP 和 LAMP 技術(shù)棧成為 Web 開(kāi)發(fā)工具的時(shí)候,他帶領(lǐng)我們走過(guò)了一段時(shí)期。對(duì)于那些沒(méi)有在1999年進(jìn)行編碼的人,他解釋了導(dǎo)致 Facebook 開(kāi)發(fā)諸如 React , GraphQL 和 Relay 等工具的演變。對(duì)于當(dāng)時(shí)正在編碼的人心中會(huì)充滿(mǎn)留戀。

我一直尊重 Facebook 所做的工程工作,但是這次演講使一切都變得正確更加清晰。使用 React 感覺(jué)就像是一種特權(quán),現(xiàn)在我知道特權(quán)的來(lái)源。我受到像 Lee 這樣的人的啟發(fā),并將繼續(xù)為社區(qū)做事。

12.即使開(kāi)發(fā)工具也與UX有關(guān)

第二天會(huì)議在 Brian Vaughn 的闡述 中繼續(xù)進(jìn)行。如果使用 React 構(gòu)建內(nèi)容,則可能已經(jīng)使用了React Dev Tools。他們無(wú)疑幫助我擺脫了自己制造的混亂局面。

React Dev Tools 得到了全面的重寫(xiě),其中包括:

  •  更好的性能
  •  新的API支持
  •  UX新功能

看,即使開(kāi)發(fā)工具也專(zhuān)注于出色的UX!

團(tuán)隊(duì)為幫助不熟悉的項(xiàng)目同學(xué)熟悉項(xiàng)目,進(jìn)行的更改使我印象深刻。盡管您可能從未接觸過(guò)陌生的代碼,但我們都知道,即使是我們自己的代碼,隨著時(shí)間的流逝也會(huì)顯得陌生。現(xiàn)在,我們可以看到 prop 如何流經(jīng)組件,如何過(guò)濾組件樹(shù),深入檢查組件以及如何將 hook 與 dev tool 一起使用。我喜歡看到的另一件事是 suspense 的轉(zhuǎn)變。這個(gè)功能看似非常簡(jiǎn)單,但很快就會(huì)變得無(wú)價(jià)。

連同共享配置文件一起,新的開(kāi)發(fā)者工具使查找原因的工作變得更加容易。那里有類(lèi)似的工具,但是現(xiàn)在我們可以直接在開(kāi)發(fā)工具中了解您的渲染。

還有很多其他很棒的補(bǔ)充,我建議您自己去探索它們。

13.可疑數(shù)據(jù)(Relay 很棒)

我想我可能要接力 Relay 了。實(shí)際上,我很晚開(kāi)始使用 GraphQL。在我的輔助項(xiàng)目中,我一直在使用 GraphQL ,我非常喜歡它。在這次會(huì)議之后,我將探索 Relay,并利用組合提供的功能。

React Suspense 希望使我們能夠顯示某些 UI,而無(wú)需等待所有 UI 準(zhǔn)備就緒ready。

讓我們看一個(gè)組件的基本示例,該組件在獲取數(shù)據(jù)時(shí)顯示加載狀態(tài)(使用 Suspense): 

  1. const Composer = (props) => {  
  2.   const data = useQuery(graphql`  
  3.     query ComposerQuery {  
  4.       me {  
  5.         photo {  
  6.           uri  
  7.         }  
  8.       }  
  9.     }  
  10.   `, variables);  
  11.   return (  
  12.     <div>  
  13.       <img src={data.me.photo.uri} />  
  14.     </div>  
  15.   );  
  16.  
  17. const Home = (props) => (  
  18.   <Suspense fallback={<Placeholder />}>  
  19.     <Composer />  
  20.   </Suspense>  
  21. ); 

在此示例中,我們有一個(gè) Composer 組件,該組件可獲取個(gè)人資料圖片的 URI,然后顯示它。您可以在 Home 將 Composer 包裝在一個(gè) Suspense 塊中的組件中看到。然后,當(dāng)數(shù)據(jù)正在加載時(shí),Placeholder 將被渲染??梢詫⑦@種模式視為 “渲染時(shí)獲取”。

使用此模式,加載順序如下:

如您所見(jiàn),這使我們能夠輕松處理數(shù)據(jù)加載。我們可以通過(guò)使用占位符或 Loading 等加載組件來(lái)提供更好的用戶(hù)體驗(yàn)。

上面的模式已經(jīng)帶來(lái)了很多收益和靈活性。但是,F(xiàn)acebook 團(tuán)隊(duì)不喜歡您必須渲染以找出組件所需的數(shù)據(jù)。為了解決這個(gè)問(wèn)題,他們開(kāi)始使用一種稱(chēng)為 “獲取數(shù)據(jù)時(shí)渲染” 的模式。

從本質(zhì)上講,為了啟用 “按需渲染” 功能,F(xiàn)acebook 團(tuán)隊(duì)已分解 useQuery 為兩部分。它分為 preloadQuery 和 usePreloadedQuery 。這到底是什么意思呢?

preloadQuery

該 API 將獲取數(shù)據(jù)并為結(jié)果提供參考。它沒(méi)有提供實(shí)際數(shù)據(jù)。

您將在顯示新用戶(hù)界面的同一事件處理程序中調(diào)用此 API。例如,如果用戶(hù)單擊將觸發(fā)導(dǎo)航到新頁(yè)面的鏈接,則將使用我們處理單擊的事件處理程序 preloadQuery 。將鼠標(biāo)懸停在某處上以打開(kāi)工具提示將是您調(diào)用此 API 的另一個(gè)示例。該 onHover 事件處理程序調(diào)用 preloadQuery 。

usePreloadedQuery

該 API 獲取 preloadQuery 調(diào)用結(jié)果。實(shí)際上,它本身不會(huì)進(jìn)行任何數(shù)據(jù)獲取。它查看的當(dāng)前狀態(tài) preloadQuery。如果準(zhǔn)備就緒,它將顯示結(jié)果。如果尚未準(zhǔn)備就緒,它將暫停。如果查詢(xún)失敗,則可能引發(fā)錯(cuò)誤。

無(wú)論發(fā)生什么情況,usePreloadedQuery 都永遠(yuǎn)不會(huì)觸發(fā)新的提取。這使其高效且可預(yù)測(cè)。

代替使用這兩個(gè) API,useQuery 將提供如下所示的加載順序:

我絕對(duì)建議您聽(tīng)喬·薩沃納(Joe Savona)解釋上面我總結(jié)的概念。他講得更好,而且更深入。這是我最喜歡的演講之一,因?yàn)槲覍?duì)這種模式所帶來(lái)的可能性感到興奮,并且迫不及待地想嘗試一下。

14. React是小說(shuō)

詹恩·克賴(lài)頓(Jenn Creighton)在會(huì)議上發(fā)表了我最喜歡的哲學(xué)演講。她從事創(chuàng)造性寫(xiě)作工作。創(chuàng)意寫(xiě)作一直是我的最?lèi)?ài)。像詹恩一樣,我曾經(jīng)幻想成為作家。她在演講中解釋了一個(gè)概念,該概念以一種有趣(且出乎意料)的方式轉(zhuǎn)化為編碼。

顯示,不告訴

讓我們看一下傳達(dá)相同含義的兩種方式(由Jenn提供)。

她累了。

她的步伐變得緩慢,隨著一步一步接近床,她的臉先接觸到了床墊,身體也感覺(jué)更加沉重。

相同的想法,對(duì)不對(duì)?她累極了。哪一個(gè)功能更強(qiáng)大?好吧,這很明顯。作為軟件工程師,我們經(jīng)常陷入困境。我們抽象,抽象,抽象,直到我們盡可能地榨干自己。

在大多數(shù)情況下,我會(huì)盡力避免代碼重復(fù)。該原理很有意義,但是,就像編寫(xiě)規(guī)則一樣,有時(shí)我們需要打破軟件開(kāi)發(fā)規(guī)則。讓我們比較兩個(gè)獲得相同結(jié)果的不同代碼。 

  1. const Nav = ({ links }) => (  
  2.   <nav>  
  3.     {  
  4.       links.map(link => (  
  5.         <Link to={link.to}>{link.name}</Link>  
  6.       ))  
  7.     }  
  8.   </nav>  
  9. );  
  10. const Header = () => {  
  11.   const links = [  
  12.     { name: 'Home', to: '/home' },  
  13.     { name: 'Settings', to: '/settings' },  
  14.   ];  
  15.   return (  
  16.     <>  
  17.       <Nav links={links} />  
  18.     </>  
  19.   );  

這看起來(lái)似乎很好用,但是如果我們想添加一個(gè)導(dǎo)航項(xiàng),該怎么辦?例如登錄按鈕。 

  1. const links = [  
  2.     { name: 'Home', to: '/home' },  
  3.     { name: 'Settings', to: '/settings' }, 
  4.     { name: 'Login', to: '??' },  
  5.   ]; 

我們的 Nav 組件無(wú)法處理這種情況。我們可以很容易地實(shí)現(xiàn)一種處理它的方法,但是這很容易失控。我們可以將 Nav 組件重構(gòu)為如下所示: 

  1. const Nav = ({ links }) => (  
  2.   <nav>  
  3.     {  
  4.       links.map(link => {  
  5.         return link.to  
  6.           ? <Link to={link.to}>{link.name}</Link>  
  7.           : <a onClck={link.onClick}>{link.name}</Link>  
  8.       })  
  9.     }  
  10.   </nav>  
  11. ); 

這將起作用,但是在難以推理 Nav 組件之前,我們將覆蓋多少個(gè)邊緣情況?我們可以用另一種方式重寫(xiě) Header 組件。 

  1. const Header = () => {  
  2.   const links = [  
  3.     { name: 'Home', to: '/home' },  
  4.     { name: 'Settings', to: '/settings' },  
  5.     { name: 'Login', to: '??' },  
  6.   ];  
  7.   return (  
  8.     <nav>  
  9.       <Link to="/home">Home</link>  
  10.       <Link to="/settings">Settings</link>  
  11.       <a onClick={onSelectLogin}>Login</a>  
  12.     <nav/>  
  13.   );  

我簡(jiǎn)化了詹恩在演講中講的例子,但我認(rèn)為這很重要。第二 Header 部分更容易推論。即使我們現(xiàn)在可能重復(fù)一遍,抽象也沒(méi)有帶來(lái)太大的好處。如果我們想將一個(gè) Icon 組件添加到其中一個(gè)鏈接中,則不必再處理 Nav 組件中的所有極端情況,只需將其添加到所需位置即可。

詹恩(Jenn)還引用了尼爾·蓋曼(Neil Gaiman)的一句話(huà),說(shuō)我不得不分享。

請(qǐng)記住,或早或晚,在達(dá)到完美之前,你必須放手去做,繼續(xù)接下來(lái)的事。

在構(gòu)建心理健康寫(xiě)作平臺(tái) Wrabit 的時(shí)候,我一直在練習(xí),使得自己變得足夠好。有時(shí)候,這讓我覺(jué)得自己不像一個(gè)開(kāi)發(fā)人員。有時(shí)候讓我感到自己的懶惰。最后,我將介紹易于理解的內(nèi)容,可以提供的內(nèi)容以及以后可以隨時(shí)重構(gòu)的內(nèi)容。

正如 Jenn 所說(shuō),重構(gòu)并非失敗。她的演講非常巧妙地將創(chuàng)意寫(xiě)作與編程編織在一起,我一定會(huì)再看一遍。

15. UX驅(qū)動(dòng)的流體動(dòng)畫(huà)

我還沒(méi)有制作太多的動(dòng)畫(huà)。我設(shè)想了一個(gè)未來(lái),我將從 Dribbble(動(dòng)畫(huà)和所有動(dòng)畫(huà))中獲得出色的 UI 設(shè)計(jì),并進(jìn)行實(shí)踐設(shè)計(jì)。動(dòng)畫(huà)絕對(duì)是設(shè)計(jì)色情片中令人愉悅的一點(diǎn),但是即使如此,我們?cè)趯?shí)現(xiàn)的時(shí)候也要牢記用戶(hù)體驗(yàn)。

像大多數(shù)談話(huà)一樣,亞歷克斯·霍爾切克(Alex Holachek)讓我以新的方式思考。我喜歡UI交互。它們讓我感到內(nèi)心溫暖而模糊。看著他們時(shí),我沒(méi)有考慮所有用戶(hù)而感到內(nèi)疚。

精美的動(dòng)畫(huà)如何對(duì)使用 Nokia 6 的用戶(hù)起作用?來(lái)自亞馬遜的 283.97加元,我買(mǎi)得起新 iPhone 之前的價(jià)格要高出很多倍。我猜很多其他人都在同一陣營(yíng)。

亞歷克斯(Alex)幫助我記住了更多關(guān)于平均值的思考。平均電話(huà),平均數(shù)據(jù)速度。建立平均和高端將永遠(yuǎn)是好的。

此外,event.preventDefault() 還會(huì)對(duì)滾動(dòng)產(chǎn)生不良影響。

16.反復(fù)體驗(yàn)

如果您無(wú)法確定,那么今年的會(huì)談內(nèi)容千變?nèi)f化。盧卡·德馬斯科(Luca Demasco)通過(guò)與 Zach Rispoli 合作開(kāi)發(fā) Wick 編輯器,向我們展示了迭代過(guò)程,從而保持了新鮮感。

Wick 編輯器是一個(gè)免費(fèi)的開(kāi)源工具,可用于創(chuàng)建游戲,動(dòng)畫(huà)以及您能想到的其他任何東西。當(dāng)Luca展示當(dāng)前版本時(shí),UI 確實(shí)給我留下了深刻的印象??雌饋?lái)很直觀,并且具有很多功能。并非總是如此。

盧卡(Luca)和朋友通過(guò)不斷的迭代達(dá)到了今天的狀態(tài)。它們也不只是為了迭代而進(jìn)行迭代。他們將Wick帶入了許多不同的環(huán)境(學(xué)校,圖書(shū)館等),并使界面出現(xiàn)在許多不同的用戶(hù)(初學(xué)者,中級(jí)用戶(hù),年輕人,老人)面前。他們采取了獲取,保留,擴(kuò)張 (Laser-Focused Approach) 的方法,并收集了很多反饋,幫助 Wick 成為今天的樣子。

當(dāng)我考慮如何迭代自己的產(chǎn)品時(shí),過(guò)程中的誠(chéng)實(shí)啟發(fā)了我。如何快速啟動(dòng)并有意地迭代?我沒(méi)有那種經(jīng)驗(yàn),所以有時(shí)信心會(huì)使我迷失,但這是我很高興采取的一個(gè)過(guò)程??吹较?Luca 這樣的人分享他的經(jīng)驗(yàn),這使我感到鼓舞,我感謝會(huì)議期間每個(gè)人都真誠(chéng)的分享。

17.簡(jiǎn)單事物的復(fù)雜性

您是否使用 react-select?沒(méi)有?那可能只有你不知道了。

該組件在 GitHub 上擁有超過(guò)18000個(gè)星標(biāo)。每周有 150 萬(wàn)次下載。好多啊。

您可能不會(huì)想到一個(gè)簡(jiǎn)單的 React 組件可能會(huì)那么復(fù)雜。當(dāng)然,你會(huì)錯(cuò)的。杰德·沃森(Jed Watson)開(kāi)發(fā)了一個(gè)漂亮的 React 組件,并且很好地實(shí)現(xiàn)了它的目的。它具有很多功能,并且開(kāi)箱即用。

杰德走了一段漫長(zhǎng)的(有時(shí)是艱苦的)道路,才實(shí)現(xiàn)了 react-select。他對(duì)開(kāi)發(fā)大規(guī)模的流行的開(kāi)源項(xiàng)目有了深刻的見(jiàn)解。他還展示了簡(jiǎn)單的事情通??赡芊浅?fù)雜。

當(dāng) Jed 展示了 react-select 到 v2.0 的演變時(shí),我受到了 Jed 的啟發(fā)。他重申了重構(gòu)的重要性以及如果您不想追求完美,就可以隨時(shí)停止。

18.優(yōu)雅的透明度

政府支出是一個(gè)重要的話(huà)題。我們應(yīng)該看到我們的稅收去向,以便使政府負(fù)責(zé)。

Lizzie Salita 證明了政府網(wǎng)站可以高效,易于使用且美觀。當(dāng)她演示 USAspending.gov 支出瀏覽器時(shí),我真的很驚訝。將其與加拿大版本進(jìn)行比較,您將獲得一個(gè)示例,該示例可以使用 React 重構(gòu)來(lái)提升用戶(hù)體驗(yàn)。

我正在慢慢地開(kāi)始涉足政治領(lǐng)域。盡管我一直在努力保持足夠的知情權(quán)以便投票,但我還有很多事情要做。擁有諸如 USAspending.gov 之類(lèi)的工具,將使它變得更加輕松有趣。我認(rèn)為我們應(yīng)該繼續(xù)開(kāi)發(fā)這樣的工具,以使每個(gè)人都能了解最新情況,以便我們所有人都可以參與塑造我們的未來(lái)。

19.奇跡驅(qū)動(dòng)的開(kāi)發(fā)

會(huì)議的最后一次演講真讓我震驚。像亞歷克斯·安德森(Alex Anderson)一樣,我是太空的忠實(shí)粉絲。亞歷克斯(Alex)建立了一個(gè)瘋狂的復(fù)雜的星艦?zāi)M器,名為T(mén)horium。

Thorium模擬器使諸如獅門(mén)空間中心之類(lèi)的許多組織能夠?yàn)楦鞣N人提供與 STEM 相關(guān)的活動(dòng)。這些空間中心使學(xué)生能夠通過(guò)高度互動(dòng)性和教育性的小組活動(dòng)來(lái)成長(zhǎng)。

React Conf 上幾乎所有的演講,人們都在為正當(dāng)理由做著鼓舞人心的事情。亞歷克斯的工作之所以突出,是因?yàn)樗臒崆閺乃f(shuō)的每句話(huà)中泄漏出來(lái)。他熱愛(ài)自己的工作,并且是一位非常有才華的工程師。他正在使用可用的技術(shù)為孩子和成年人建立良好的體驗(yàn)。

我最喜歡從 Alex 的演講中脫穎而出(這需要我花一點(diǎn)時(shí)間才能完全理解)是奇跡驅(qū)動(dòng)開(kāi)發(fā)的概念。您是否想過(guò)技術(shù)的可能性?那你有什么能力呢?🤔

這些類(lèi)型的問(wèn)題驅(qū)使我們建立有趣,愉快和真正美好的體驗(yàn)。這些類(lèi)型的問(wèn)題使 Facebook 的工程師和世界各地的公司可以利用技術(shù)來(lái)塑造我們的世界。

我從今年在 React Conf 上遇到的每個(gè)人學(xué)到了很多東西。我很高興能夠參加,并感到充滿(mǎn)驚奇和興奮。

我等不及要看什么奇跡驅(qū)使我成長(zhǎng)!

如前所述,這些只是我的一些收獲。在為期兩天的會(huì)議中,共享了許多庫(kù),技術(shù)和哲學(xué)思想。我希望我能抓住他們?nèi)?!如果你明年去,你?huì)明白我的意思。

如果您希望我擴(kuò)展這些想法,我將非常樂(lè)意。伸出手,讓我知道!

最后,更不用說(shuō)德文·林賽了。她給了我們笑聲,糖果和內(nèi)部的活動(dòng)。沒(méi)有她,這次會(huì)議就不會(huì)一樣。 

 

責(zé)任編輯:龐桂玉 來(lái)源: segmentfault
相關(guān)推薦

2024-06-21 09:04:47

2015-10-10 16:02:36

React NativAndroid

2024-01-26 09:01:30

HooksReact 19版本

2024-04-10 07:49:37

React 19use 鉤子Suspense

2024-12-06 11:22:27

2024-03-01 10:58:22

React前端框架React18

2021-08-27 14:26:06

開(kāi)發(fā)技能React

2019-08-20 15:16:26

Reacthooks前端

2023-09-13 16:55:42

JavaScript數(shù)組

2019-10-25 10:21:10

React 工具JavaScript

2022-03-02 18:23:15

云遷移云計(jì)算

2019-02-25 07:07:38

技巧React 優(yōu)化

2025-02-17 12:24:06

2019-01-02 08:00:00

軟件工程師軟件開(kāi)發(fā)

2014-11-24 09:39:26

docker云計(jì)算

2016-12-19 10:00:00

React性能優(yōu)化

2018-01-04 16:32:30

前端JavaScript

2017-06-12 17:54:45

Python編程

2024-04-03 08:47:58

React服務(wù)端組件Actions

2024-02-20 07:44:43

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)