2022年成為網頁開發者的路線圖

網頁開發一直在不斷演進,每年一月,我都喜歡停下腳步重新評估並觀察這個生態系統。 問題是:2022年初學者應該從哪裡開始學習,才能學到能找到工作的技能呢? 地圖有變嗎?與去年有不同嗎? 變革似乎需要很長的時間,但它們可以很微妙,有時候從一年到另一年事情會徹底變化,你甚至都意識不到。 因此,我開始撰寫這篇文章,指導您如何在網頁開發領域中導航。 對於想要跟上生態系統並保持相關性的開發人員來說,這也是很有用的。有什麼新東西你一定要學嗎? 讓我們開始吧。 先說一下,這是一個高度主觀的路線圖。這不是一個列出了1000種不同技術的路線圖,然後就讓你淚流滿面地愁眉苦臉。 讓我為您挑選最好的技術,相信我,這樣您就可以停止無休止的分析,並繼續前進。 在網頁開發中,我們有3條路線: 前端開發人員 後端開發人員 全棧開發人員 這些角色之間的界線有點模糊。在這篇文章中,我將聚焦於全棧開發人員,這是我最喜歡的專業化領域——在這個領域中,您不需要專攻前端或後端,而是能夠創建出所有展示出來的內容。 積極忽略 首先,讓我們從我們將忽略的內容開始。 在這個路線圖中,我將忽略像UI/UX工程師、可訪問性和其他重要主題這樣更專業的範疇。這些完全是不同的職業,有自己獨特的學習路徑。 您不可能從一開始就假設您需要學習所有東西。 積極排除。 我們將忽略使用Web技術進行移動開發。那是一個完全不同的領域。我們還將忽略一切不屬於網頁開發的趨勢,而是不同類型的開發專業化,比如AI、數據科學、web3等等。 深入研究5個核心技術 我建議深入研究一組核心的5個技術: HTML CSS JavaScript React Next.js 這些5個技術按順序是您需要掌握的5個東西。 您可以用一只手數清楚。 其中3個是基礎。HTML、CSS、JavaScript。您無法避免它們。這些是我們的工具。 HTML定義了內容 CSS定義了我們希望內容呈現的樣子 JavaScript定義了行為 React是我在這裡的首個選擇。 React是一種簡化創建用戶界面的技術。 它以許多不同的方式讓我們的生活更輕鬆。 HTML、CSS和JavaScript沒有其他替代品,但您可以選擇使用其他東西,比如Svelte、Vue、Angular,但我選擇了React。 但是React非常流行,它有一個悠久的歷史和遺產,使它成為事實上的標準。它被使用得如此廣泛,以至於您可以找到一切,每個庫,大量的教程和課程,需要幫助時也不用擔心。 您可以賭一個替代品,但您還可以看看工作市場和React帶來的機會,並選擇它。 現在我們需要最後一個組件。一個網絡應用程序框架。 我們選擇了React,所以我們需要選擇一個與React配合的網絡應用程序框架。 在React和HTML/CSS/JavaScript三者之上,我選擇了Next.js,它可以讓React-based網站和應用程序的服務和前端無縫集成。 所以,我們共同使用的3個核心技術是HTML/CSS/JavaScript,最上面的是非常流行的UI庫React,再加上一個非常流行的框架Next.js。 現在還有更多的東西可以添加到這5個選擇中,但您需要從某個地方開始。 通過這5個選擇,您已經排除了很多其他可能分散注意力、讓您在成為網頁開發者的道路上分心的東西。 讓我再強調一下這個排除。至少在開始時忽略TypeScript。我知道你會一直聽到它,但它對你的旅程並不重要,你可以在未來的任何時候添加它。 JavaScript讓事情變得簡單得多,這對於保持動力至關重要。 從HTML和CSS開始 此時,開始學習並進行實驗。學習HTML,創建網頁。閱讀我的[HTML手冊](https://flaviocopes.com/page/html-handbook/)。多做練習。Codepen是一個很好的工具。 只是不要被“我使用CSS完成了這個”吸引住,有些人用CSS做了一些不可能的事情。我不知道他們是怎麼做到的,這是藝術(如果您喜歡,那很好,但在我們的旅程中不是很有用)。 至於CSS,學習基礎知識。閱讀我的[CSS手冊](https://flaviocopes.com/page/css-handbook/)。並立即開始學習Tailwind,這是一種非常實用且流行的將CSS應用於您的網頁的方法。 CSS可能很復雜,但Tailwind使它變得更簡單。相信我,我從事CSS已有 20 年,使用Tailwind讓我終於能夠在每個項目上都處理好事情。這也是其他很多人的感受。 您應該使用HTML和CSS/Tailwind創建哪些項目呢?嗯,從您的愛好和興趣開始。創建一些隨機的網頁,看看它們在瀏覽器中如何顯示。 創建一個有關狗的網頁,有關足球、橄欖球、棒球的網頁,有關您最喜歡的Netflix系列、最喜歡的音樂家的網頁,等等。重要的是進行實驗。 在HTML和CSS/Tailwind上別太花哨。它們是兔子洞。關於這兩者有很多東西要學。熟悉它們,使用它們來完成任務。 熟悉像VS Code這樣的編輯器,以及終端和Bash shell的基礎知識。學習Git來管理版本。它將為您節省很多時間和麻煩。 添加JavaScript 現在是學習JavaScript的時候了。下載並閱讀我的JavaScript初學者手冊。 HTML和CSS定義了內容和呈現方式,而JavaScript是一門程式語言。 使用JavaScript,我們可以開始玩樂。 基礎知識有點……無聊並且可能會令人困惑,因為有很多理論和新概念。但這是您在網頁開發中最常使用的東西。因此,掌握它是至關重要的。 逐步將JavaScript添加到您的網頁中。 使用JavaScript,您將能夠為您的網頁添加一些互動性。您將探索DOM,這是瀏覽器讓我們與頁面上的元素進行交互的方式。 您將創建您的第一個表單。 在創建第一個表單之後,您將需要將表單數據發送到某個地方。 想像一下,您建立了一個電子報註冊表單。您想要將電子郵件發送到某個地方以便存儲它。...

Astro Props(Astro 屬性)

你可能對於像 React、Vue 或 Svelte 這樣的現代 JavaScript 框架中的屬性概念很熟悉。 注意:我之前寫過相關文章,你可以在 React Props、Vue Props 和 Svelte Props 找到這些文章。 屬性是我們將信息傳遞給組件的方式。這包括變數和函數。 Astro 組件 也支持屬性。 以下是如何使用它們。 假設你在 src/components/Hello.astro 中定義了一個 Hello 組件: <p>Hello!</p> 在使用組件時,你可以為它傳遞一個名為 name 的屬性,像這樣:<Hello name="Flavio" />,你可以使用以下語法在組件輸出中顯示名稱: <p>Hello {Astro.props.name}!</p> 通常,在組件的 frontmatter 部分使用對象解構將屬性提取到單獨的變量中,這在擁有複雜組件時很方便: --- const { name } = Astro.props --- <p>Hello {name}!</p> 下面是如何處理多個屬性,以支持這樣的使用方式:<Hello name="Flavio" message="歡迎" /> --- const { name, message } = Astro.props --- <p>{message} {name}!</p> 以這種方式,你可以為未設置的屬性提供默認值: --- const { name = '', message = 'Hello' } = Astro....

Gatsby介紹

Gatsby是一個使用React構建應用程序和網站的平台。 它是一個允許你使用一系列技術和實踐來構建的工具,這些技術和實踐被統稱為JAMstack。 Gatsby是當前前端開發領域中最火熱的工具之一。為什麼呢?我認為有以下幾個原因: “JAMstack"方法用於構建Web應用程序和網站的大幅增長 行業中對於"Progressive Web Apps”(漸進式Web應用程序)技術的快速采用,這也是Gatsby的關鍵功能之一 它是使用React和GraphQL構建的,這兩個技術非常流行和備受追捧 它功能強大 它的速度很快 文檔很好 網絡效應(有人使用它,創建站點,製作教程,更多人了解它,形成一種循環) 一切都是JavaScript(不需要學習新的模板語言) 它隱藏了複雜性,但允許我們逐步定制每一步 以上都是很好的優點,Gatsby絕對值得一試。 它是如何工作的? 使用Gatsby,您可以使用React組件來構建應用程序。 您通常會使用Markdown編寫在站點中呈現的內容,但您也可以使用任何類型的數據源,例如無頭CMS或像Contentful這樣的Web服務。 Gatsby會構建站點,並將其編譯為靜態HTML,可以部署在任何Web服務器上,例如Netlify、AWS S3、GitHub Pages、常規託管提供商、PAAS等。您只需要找一個可以提供普通HTTP頁面和內容給客戶端的地方。 我在上面的列表中提到了漸進式Web應用程序。Gatsby會自動將您的站點生成為PWA,並使用服務工作器加快頁面加載和資源緩存。 您可以通過插件來增加Gatsby的功能。 安裝 您可以在終端中運行以下命令安裝Gatsby: npm install -g gatsby-cli 這將安裝gatsby命令行工具。 (當有新版本時,可以使用相同的命令進行更新) 您可以運行以下命令創建一個新的"Hello World"站點: gatsby new mysite https://github.com/gatsbyjs/gatsby-starter-hello-world 此命令將在mysite文件夾中創建一個全新的Gatsby站點,使用位於https://github.com/gatsbyjs/gatsby-starter-hello-world的starter。 Starter是您可以基於的示例站點。另一個常見的starter是default,可在https://github.com/gatsbyjs/gatsby-starter-default上找到。 您可以在這裡找到所有可用的starter的列表 運行Gatsby站點 在終端完成安裝starter之後,可以運行以下命令來運行網站: cd mysite gatsby develop 這將在本地主機的8000端口上啟動一個新的Web服務器並提供網站。 以下是我們的Hello World starter的運作示例: 檢查站點 如果用您喜歡的代碼編輯器(我使用VS Code)打開您創建的站點,您會發現有3個文件夾: .cache:一個包含Gatsby內部代碼的隱藏文件夾,您在現在不需要更改其中的任何內容 public:在構建站點後包含生成網站的靜態文件 src:包含React組件的文件夾,這裡只有index組件 static:將包含靜態資源,例如CSS和圖片 現在,對默認頁面進行簡單的更改非常容易,只需打開src/pages/index.js文件,將“Hello World!”更改為其他內容,然後保存。網頁應立即熱重載該組件(這意味著網頁實際上不會刷新,但內容會更改 - 這是由底層技術支持的一個技巧)。 要添加第二個頁面,只需在此文件夾中創建另一個.js文件,與index.js具有相同的內容(調整内容)並保存。 例如,我創建了一個名為second.js的文件,具有以下內容: import React from 'react' export default () => <div>Second page!...

how-to-learn-react

#如何學習React 找出從零開始成為React大師的最佳途徑 你該如何學習React? 和大多數事物一樣,你需要付出一些努力,找到一個好的學習資源,保持學習的一致性,並儘早將所學的應用到實踐中,以加強你的學習並讓所學的知識牢記在腦中。 但是…你應該從哪裡開始? 在本文中,我想列出一些我創建的資源,用於從零開始成為React大師。 首先,你需要堅實的JavaScript基礎。如果你剛開始學習,花點時間深入研究JavaScript基礎知識,再深入學習React。我建議你先閱讀我的JavaScript手冊。 如果你的JavaScript基礎還可以,但有點生疏且不熟悉最新的ECMAScript標準,我的ES5到ESNext手冊也是一個很好的參考資料。 接下來,我的React手冊將成為你最好的朋友。我在這份手冊中花了很多時間,確保它提供了你成為出色的React開發者所需的所有基礎知識。 我認為這些資源會讓你忙上一段時間。 正如我之前提到的,實踐至上。在學習的過程中,專注於每天建立一些東西,即使只是簡單的項目。不要僅僅閱讀理論,要將它應用到實踐中。建立示範應用程式。我有一個示範應用程式點子的長列表,可以從中獲得靈感。 我還開設了一門React課程,在課程中,我將教你如何使用React建立6個實用的項目(當然包括Hooks)。

JavaScript在這十年的發展

回顧過去十年的JavaScript和Web的發展,真是一段驚心動魄的旅程。 儘管我書架上有一些1998年的JS書籍,但2010年時我並沒有寫很多JavaScript。當時我主要使用Mootools和jQuery插件。可能有些JS代碼是我寫的,但並沒有什麼突破性的創新。 那時的JavaScript絕對不被視為熱門語言。它的主要用途是在像GMail、Google Maps等有大量預算的項目中進行一些高級工作。 對於大多數人來說,用JavaScript編寫整個應用程序的概念當然是陌生的。 快進到2019年12月31日,JavaScript可真是太普遍了。 JavaScript無所不在。在過去的10年中,它經歷了多次更新,包括一個主要更新(ES6),如今我們寫JavaScript的方式與2010年完全不同。 異步和等待、箭頭函數、Promises、生成器、const/let、類、模板字面量等,肯定使現代JavaScript看起來和行為也非常不同。 ES模塊使大型應用程式更易於撰寫和維護。 但這不僅僅是語法和語言的新特性改變了。 我認為,這十年最大的變化之一就是構建工具的引入和廣泛使用。從Grunt到Gulp再到Webpack、Parcel和Rollup,工具的發展如此迅速,作為開發者,我們每天都有越來越大的能力。 模塊打包器為我們提供了非常高級的功能,如樹搖篩檢。了解這些技術是如何從早期發展至今真是令人驚嘆。 我們要提到Node.js嗎?從技術上講,Node在2009年春季首次推出,所以並不屬於這個十年。但可以肯定的是,Node第一年並沒有取得很大的突破,但在這十年中卻取得了巨大的成功。 現在讓我們來談談瀏覽器。2010年1月的IE版本是8,其佔有率超過50%並且Edge還不存在。Chrome作為一歲的瀏覽器佔有率僅為5%,因為1.0版本是在2008年12月發布的。你能想像嗎?如今Chrome是最受歡迎的瀏覽器,遠超其他瀏覽器。據我所知,64%的互聯網使用Chrome,而Safari佔有16%。 說到Safari,在2010年1月,iPhone 3GS已經推出(我當時沒有,我還用著Nokia。我第一部iPhone是在那一年晚些時候推出的iPhone 4)。那時JavaScript在該設備上執行速度可能不會很快。但如今移動瀏覽器可以以閃電般的速度執行JavaScript,並且JavaScript被用於使用Cordova、Ionic、React Native等令人驚嘆的框架來構建移動應用程序。 npm於2010年1月推出,它的崛起可謂驚人。起初它只是一個Node.js模塊的包管理器,如今npm也成為了前端開發的事實標準。它在去年6月份超過了一百萬個包,我敢肯定它是世界上最大的軟件目錄。 順帶一提,GitHub在2010年1月剛剛存在1年半的時間。看看它當時的樣子真是有趣。 在這十年中,許多驚人的項目應運而生。我可以提到Ember.js、CoffeeScript、Angular、React,只舉幾個例子。 我有幸參與並加入了許多不同的社區,而JavaScript和整個生態系統之所以在這十年中發展如此迅速,是因為工作在其中的人們。 憑著熱情、勤奮、承諾和慷慨精神,開源社區以及成百上千的充滿企圖心的公司,使JavaScript這個開發世界的一角成為今天的模樣。 回顧過去,看到我們走了多遠真是令人愉悅。 我真的無法想像這個未來十年會帶給我們什麼。

Next.js 中的絕對導入

如果我們在 Next.js 的 React 組件中可以避免使用相對路徑來導入,那該有多好呢? 所以,舉個例子: import Layout from '../../components/layout' 我們可以直接這樣寫: import Layout from 'components/layout' 這是可能的,它被稱為絕對導入。 只需在項目的根目錄添加一個名為 jsconfig.json 的文件,並將其內容設置為: { "compilerOptions": { "baseUrl": "." } } 這就是了,絕對導入就會開始工作。

Next.js 如何在新視窗中開啟連結

以下是在 Next.js 中如何在新視窗中開啟連結的方法: <Link href={url}> <a target="_blank">點擊這個連結</a> </Link> 首先,將 a 標籤包裹在 Link 元件中(這是 Next.js 提供的 Link 元件),然後在 a 標籤內部加入 target="_blank" 屬性,就像在純 HTML 中一樣。 href 屬性保留在 Link 元件上,以便與客戶端路由相容。

Reach Router 教學

快速開始在您的 React 應用程式中使用 Reach Router 在最近的一個專案中,我使用了 Reach Router ,我認為這是在 React 應用程式中實現路由的最簡單方法。 相比於我之前使用過的 React Router 來說,我覺得 Reach Router 更容易上手。 以下是一個短短五分鐘的教學,讓您快速了解 Reach Router 的基本用法。 安裝 首先,在命令行輸入以下指令安裝 Reach Router: npm install @reach/router 如果您對 @ 的語法不熟悉,它是 npm 的一個功能,允許使用專屬的套件名稱空間來命名套件。 接下來,將它引入到您的專案中: import { Router } from '@reach/router' 基本用法 我在頂層 React 檔案 index.js 中使用它,通常是在 create-react-app 安裝中,我將所有想要顯示的元件包裝在內: ReactDOM.render( <Router> <Form path="/" /> <PrivateArea path="/private-area" /> </Router>, document.getElementById('root') ) 我在元件上添加的 path 屬性可用於設定它們的路徑。換句話說,當我在瀏覽器的網址欄輸入這個路徑時,Reach Router 就會顯示對應的元件給我看。 / 路徑是預設路由,也就是當您在應用程式網域之外沒有設置 URL / 路徑時,它將顯示。也就是說,它是「首頁」。...

React Context API (React 上下文 API)

上下文 API 是一種很好的方法,讓我們在應用程式中傳遞狀態,而不需要使用 props。 上下文 API 的引入可以讓我們在應用程式中傳遞狀態 (並且允許該狀態在多個組件之間更新),而不需要使用 props。 React 團隊建議,在只有幾個層級的子組件需要傳遞狀態的情況下,仍然使用 props,因為相比於上下文 API,props 是更簡單的 API。 在許多情況下,使用上下文 API 可以避免使用 Redux,大大簡化我們的應用程式,同時學習如何使用 React。 它是如何運作的呢? 你可以使用 React.createContext() 創建一個上下文 (Context): const { Provider, Consumer } = React.createContext() 然後,你可以創建一個包裹組件 (wrapper component),並返回一個 Provider 組件,在其中加入所有你希望訪問上下文的組件: class Container extends React.Component { constructor(props) { super(props) this.state = { something: 'hey' } } render() { return ( <Provider value={{ state: this.state }}>{this.props.children}</Provider> ) } } class HelloWorld extends React.Component { render() { return ( <Container> <Button /> </Container> ) } } 我將這個組件命名為 Container,因為它將是一個全局的提供者 (Provider)。你也可以創建更小的上下文 (Context)。...

React Hooks 簡介

學習如何使用 Hooks 建立 React 應用程式 Hooks 是在 React 16.7 中引入的功能,它將改變我們未來編寫 React 應用程式的方式。 在出現 Hooks 之前,某些關鍵的功能只能在類別組件中實現:擁有自己的狀態和使用生命週期事件。輕巧靈活的函式組件在功能上受到了限制。 Hooks 允許函式組件擁有狀態並響應生命週期事件,並且幾乎使類別組件過時。它們還允許函式組件以良好的方式處理事件。 存取狀態 使用 useState() API,您可以創建一個新的狀態變量並對其進行更改。useState() 接受狀態項目的初始值並返回包含狀態變量和修改狀態的函數的陣列。由於它返回的是一個陣列,我們使用陣列解構來訪問每個單獨的項目,就像這樣:const [count, setCount] = useState(0)。 以下是一個實際示例: import { useState } from 'react' const Counter = () => { const [count, setCount] = useState(0) return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}>Click me</button> </div> ) } ReactDOM.render(<Counter />, document.getElementById('app')) 您可以添加任意多個 useState() 調用,以創建任意多個狀態變量。只需確保在組件的頂層調用它(不在 if 或其他塊中)。 Codepen 上的示例:...