偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

19個來自2019 React Conf的總結(jié)

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

[[282171]]

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

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

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

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

1. 服務(wù)于開發(fā)者體驗的用戶體驗

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

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

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

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

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

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

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

這方面的的一個例子就是鄭玉芝談話中提到的選擇混合 。你可能也聽說過 Suspense,這些都將改善整個 Web 上的用戶體驗。

并發(fā)模式

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

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

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

3. CSS-in-JS-at-FB

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

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

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

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

這個例子雖然很 “幼稚”,例子看起來也很簡單,但是很快就會失控。Facebook 旨在通過新的類庫來解決諸如特異性戰(zhàn)爭,主題化和可訪問性之類的問題。

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

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

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

原子 CSS

每個類的創(chuàng)建都僅有一個唯一的屬性值對。這用于優(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.   );  

這個例子展示了 CSS 的原子性。它還展示了如何使用 props 來設(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.   );  

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

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

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

分階段代碼分割

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

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

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

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

 

到第一個有意義的畫面的時間

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

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

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

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

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

5.解決世界的饑餓

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

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

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

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

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

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

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

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

REST

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

GraphQL

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

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

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

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

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

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

除了向?qū)W習(xí) Sophie 的之外,我覺得自己對 React 渲染器的工作原理只有一點(diǎn)了解。她沒有讓我撓頭。一切都簡單地解釋,并且清楚地展示了出來。還有什么比這更棒的呢?

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

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

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

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

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

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

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

9.無障礙馬拉松

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

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

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

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

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

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

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

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

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

11.時間旅行到1999

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

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

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

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

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

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

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

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

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

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

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

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

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

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

讓我們看一個組件的基本示例,該組件在獲取數(shù)據(jù)時顯示加載狀態(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. ); 

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

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

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

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

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

preloadQuery

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

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

usePreloadedQuery

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

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

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

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

14. React是小說

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

顯示,不告訴

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

她累了。

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

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

在大多數(shù)情況下,我會盡力避免代碼重復(fù)。該原理很有意義,但是,就像編寫規(guī)則一樣,有時我們需要打破軟件開發(fā)規(guī)則。讓我們比較兩個獲得相同結(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.   );  

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

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

我們的 Nav 組件無法處理這種情況。我們可以很容易地實(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 組件之前,我們將覆蓋多少個邊緣情況?我們可以用另一種方式重寫 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.   );  

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

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

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

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

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

15. UX驅(qū)動的流體動畫

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

像大多數(shù)談話一樣,亞歷克斯·霍爾切克(Alex Holachek)讓我以新的方式思考。我喜歡UI交互。它們讓我感到內(nèi)心溫暖而模糊??粗麄儠r,我沒有考慮所有用戶而感到內(nèi)疚。

精美的動畫如何對使用 Nokia 6 的用戶起作用?來自亞馬遜的 283.97加元,我買得起新 iPhone 之前的價格要高出很多倍。我猜很多其他人都在同一陣營。

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

此外,event.preventDefault() 還會對滾動產(chǎn)生不良影響。

16.反復(fù)體驗

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

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

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

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

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

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

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

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

杰德走了一段漫長的(有時是艱苦的)道路,才實(shí)現(xiàn)了 react-select。他對開發(fā)大規(guī)模的流行的開源項目有了深刻的見解。他還展示了簡單的事情通常可能非常復(fù)雜。

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

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

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

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

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

19.奇跡驅(qū)動的開發(fā)

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

Thorium模擬器使諸如獅門空間中心之類的許多組織能夠為各種人提供與 STEM 相關(guān)的活動。這些空間中心使學(xué)生能夠通過高度互動性和教育性的小組活動來成長。

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

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

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

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

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

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

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

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

 

責(zé)任編輯:龐桂玉 來源: 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

2019-08-20 15:16:26

Reacthooks前端

2021-08-27 14:26:06

開發(fā)技能React

2023-09-13 16:55:42

JavaScript數(shù)組

2022-03-02 18:23:15

云遷移云計算

2019-10-25 10:21:10

React 工具JavaScript

2019-02-25 07:07:38

技巧React 優(yōu)化

2025-02-17 12:24:06

2019-01-02 08:00:00

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

2014-11-24 09:39:26

docker云計算

2018-01-04 16:32:30

前端JavaScript

2017-06-12 17:54:45

Python編程

2024-02-20 07:44:43

2024-04-03 08:47:58

React服務(wù)端組件Actions

2016-12-19 10:00:00

React性能優(yōu)化
點(diǎn)贊
收藏

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