本系列介紹:《全棧開發從入門到放棄》是本人學習如何使用JavaScript開發現代Web應用程序的過程記錄。課程的重點是使用ReactJS構建單頁面應用程序(SPA)。
本系列記錄了本人學習過程中的要點,不成體系。如果你想深入學習,建議尋找官方教程 ??
必要軟件安裝
- Chrome 或 Firefox 開發版。
- Git 和 GitHub。
- Visual Studio Code。
- Node.js
Web開發準則:始終打開開發者控制臺。
HTTP GET
服務器和瀏覽器使用HTTP協議相互通信, 瀏覽器可使用 Get 方法發送請求。
傳統的網絡應用
由于含有變量,模板字符串是可運行的字符串。
課程使用 Node.js
和 Express
創建Web服務器。
使用 Console
選項卡和 console.log
命令可以方便調試。
事件處理和回調函數
調用事件處理程序的機制在 Javascript
中非常常見。事件處理函數被稱為回調函數。應用代碼時不直接調用函數本身,而是運行時瀏覽器會在事件發生的適當時間調用函數。
文檔對象模型(Document Object Model, DOM)
DOM
是一個 API, 它支持對web頁面對應的元素樹進行編程修改。
從console中操作文檔對象
html 文檔 DOM 樹的最頂層節點稱為文檔對象(document
)??梢栽诳刂婆_的console中操作文檔對象。例如:
list = document.getElementsByTagName('ul')[0];
newElement = document.createElement('li');
newElement.textContent = 'Page manipulation from console is easy.是吧'
list.appendChild(newElement)
注意,上述更改只是更改瀏覽器頁面,并沒有將更改推送到服務器。
層疊樣式表(Cascading Style Sheets, CSS)
CSS
是一種用來確定web應用外觀的標記語言。
CSS 中的類選擇器用于選擇頁面中的某些部分,并對它們定義樣式規則。例如:
.container {
padding: 10px;
border: 1px solid;
}
類選擇器的定義始終以句點 .
開頭,并包含類的名稱。
CSS 屬性可以添加到 HTML 元素中,例如:
<body>
<div class="container">
<h1>Notes</h1>
</div>
</body>
HTML 元素也可以有 class 以外的屬性。例如:
上述代碼中包含id
屬性,JavaScript 代碼可使用 id 來查找元素。同樣可以在控制臺的Elements
中更改元素樣式,這也不是永久性的。
表單與HTTP POST
表單 Form 具有屬性 action 和 method,例如:
<form action="/new_note" method="POST">
<input type="text" name="note">
<br>
<input type="submit" value="Save">
</form>
上述屬性定義將表單作為一個 HTTP POST 請求提交到 /new_note
地址。數據作為 POST 請求的body
發送到服務器。
例如,下述服務器端代碼可通過訪問請求對象req的body來訪問發送來的數據。
app.post('/new_note', (req, res) => {
notes.push({
content: req.body.note,
});
return res.redirect('/notes');
});
AJAX
異步的JavaScript和XML(Asynchronous JavaScript and XML, AJAX) 是2005年2月引入的一個術語。它描述了一種新的革命性的方法,這種方法使用包含在 HTML 中的 JavaScript 來獲取網頁內容,而且不需要重新渲染頁面?,F在已經普遍應用。
單頁面應用
單頁面應用 Single-page application (SPA) 只從服務器獲取一個HTML頁面,內容由JavaScript在瀏覽器中執行操作。
JavaScript庫
JavaScript工具庫操作頁面更容易。jQuery因為它所謂的跨瀏覽器兼容性發展開來。
由于SPA的發展,幾種更現代的開發方式流行開來。先是BackboneJS, 然后有AngularJS?,F在流行的有React和Vue.js。
此次學習課程中使用 React 和 Redux 庫。
全棧web開發
課程中將關注應用的所有部分: 從前端、后端到數據庫。將使用 JavaScript 編寫后端代碼,使用 Node.js 運行時環境。