前端知識點參考

weixin_33866037發表於2018-06-07

JavaScript

ES6/ES2015

這是本人非常看重的一塊;ES5以前,JavaScript充其量跟C也差不了太多,全域性變數滿天飛,感覺不好。ES6之後引入了很多新特性,比如class,async,Promise等等,瞬間就充滿了活力,非常吸引人。
ECMAScript 6 入門這套內容可以多看看,工作中可以應用到

  • const 和 let
  • 模板字串
  • 預設引數
  • 箭頭函式
  • 模組的 Import 和 Export
  • 析構賦值
  • Spread Operator...
  • Promises
  • async/await
  • class
  • JavaScript中使用fetch進行非同步請求
  • Array和Set互轉,實現陣列去重
  • Babel轉碼,將ES6程式碼對映為ES5,相容瀏覽器

原型

JavaScript是通過物件,建構函式(類),原型(建構函式.prototype)三個實體和三種指標,__proto__,prototype, constructor,來實現物件導向功能的。
在ES5以前,理解這一點非常重要,是物件導向程式設計的基礎。
ES6之後,可以直接使用class, extend等關鍵字,理解起來就方便多了。雖然被稱為語法糖,但是實際上非常重要。
徹底理解JavaScript原型
javaScript原型鏈理解
物件模型的細節
繼承與原型鏈


React

  • React是一個典型的MVC框架,但是不是一個完整的MVC框架,它是構建易於可重複呼叫的web元件,側重於UI, 也就是view層。
  • React的主旨是元件化,React.Component是基類;
  • JSX 是 JavaScript 語法的擴充套件。React 開發不一定使用 JSX ,但我們建議使用它。標籤也會轉化為JavaScript 程式碼,會快一點;
  • React通過對DOM(Document Object Model)的模擬,最大限度地減少與DOM的互動。
  • state 和 props 主要的區別在於 props 是不可變的,而 state 可以根據與使用者互動來改變。而子元件只能通過 props 來傳遞資料
  • 父傳子,通過props;子傳父,通過函式引數;兄弟之間通訊,通過父元件作為媒介;
  • 生命週期函式:


    1186939-af93f6faab6698fb.png
    React生命週期.png
  • React Refs獲取DOM節點上元件
  • 教程:簡介 React

Flux

Flux 是一種架構思想,和 MVC 一樣,用以解決軟體結構的問題,如上所說 React 只是涉及了 UI 層所以在搭建大型應用時必須要有與之配套的應用架構。在 React 社群大家普遍使用 Flux 架構的思想來搭建應用。


1186939-9c30d6af73a47bad.png
flux.png

Redux

dva就是基於這個二次開發而來的
Redux 中文文件


dva

  • dvajs/dva-knowledgemap
  • 初識 Dva
  • dva 的 effects 是通過 generator 組織的。Generator 返回的是迭代器,通過 yield 關鍵字實現暫停功能。
  • React Component 有 3 種定義方式,分別是 React.createClass, class 和 Stateless Functional Component。推薦儘量使用最後一種,保持簡潔和無狀態。這是函式,不是 Object,沒有 this 作用域,是 pure function。
  • class 是保留詞,所以新增樣式時,需用 className 代替 class 。
  • JavaScript 表示式需要用 {} 括起來,會執行並返回結果。
  • Spread Attributes;這是 JSX 從 ECMAScript6 借鑑過來的很有用的特性,用於擴充元件 props 。
const attrs = {
  href: 'http://example.org',
  target: '_blank',
};
<a {...attrs}>Hello</a>
  • JavaScript 是弱型別語言,所以請儘量宣告 propTypes 對 props 進行校驗,以減少不必要的問題。
  • CSS Modules 預設是區域性作用域的,想要宣告一個全域性規則,可用 :global 語法。
  • reducer 是一個函式,接受 state 和 action,返回老的或新的 state 。即:(state, action) => state
  • dva 裡,effects 和 subscriptions 的拋錯全部會走 onError hook,所以可以在 onError 裡統一處理錯誤。
  • Effects: put用於觸發 action 。call用於呼叫非同步邏輯,支援 promise 。select用於從 state 裡獲取資料。
  • subscriptions 是訂閱,用於訂閱一個資料來源,然後根據需要 dispatch 相應的 action。資料來源可以是當前的時間、伺服器的 websocket 連線、keyboard 輸入、geolocation 變化、history 路由變化等等。格式為 ({ dispatch, history }) => unsubscribe 。
  • Route Components 是指 ./src/routes/ 目錄下的檔案,他們是 ./src/router.js 裡匹配的 Component。
  • dva架構圖


    1186939-172cd8d67a83ec35.png
    dva.png
  • State 表示 Model 的狀態資料,通常表現為一個 javascript 物件(immutable data)。
  • Action 是一個普通 javascript 物件,它是改變 State 的唯一途徑。無論是從 UI 事件、網路回撥,還是 WebSocket 等資料來源所獲得的資料,最終都會通過 dispatch 函式呼叫一個 action,從而改變對應的資料。
  • dispatch 是用於觸發 action 的函式,action 是改變 State 的唯一途徑,但是它只描述了一個行為,而 dipatch 可以看作是觸發這個行為的方式。
    dispatch是函式,action是函式的引數。
  • 在 dva 中,reducers 聚合積累的結果是當前 model 的 state 物件。通過 actions 中傳入的值,與當前 reducers 中的值進行運算獲得新的值(也就是新的 state)。需要注意的是 Reducer 必須是純函式
  • Effect 被稱為副作用,在我們的應用中,最常見的就是非同步操作,Effects 的最終流向是通過 Reducers 改變 State。
  • Subscription 語義是訂閱,用於訂閱一個資料來源,然後根據條件 dispatch 需要的 action。資料來源可以是當前的時間、伺服器的 websocket 連線、keyboard 輸入、geolocation 變化、history 路由變化等等。
  • 這裡的路由Router通常指的是前端路由,由於我們的應用現在通常是單頁應用,所以需要前端程式碼來控制路由邏輯,通過瀏覽器提供的 History API 可以監聽瀏覽器url的變化,從而控制路由相關操作。
  • 在 dva 中我們通常以頁面維度來設計 Container Components。
    所以在 dva 中,通常需要 connect Model的元件都是 Route Components,組織在/routes/目錄下,而/components/目錄下則是純元件(Presentational Components)。

antd

PC端元件庫
Ant Design of React

antd-mobile

移動端元件庫
Ant Design Mobile of React


CSS

Flex佈局

Flex 佈局教程:語法篇
Flex 佈局教程:例項篇

  • Flex 是 Flexible Box 的縮寫,意為"彈性佈局",用來為盒狀模型提供最大的靈活性。
  • 設為 Flex 佈局以後,子元素的float、clear和vertical-align屬性將失效。
  • 採用 Flex 佈局的元素,稱為 Flex 容器(flex container),簡稱"容器"。它的所有子元素自動成為容器成員,稱為 Flex 專案(flex item),簡稱"專案"。
  • 容器預設存在兩根軸:水平的主軸(main axis)和垂直的交叉軸(cross axis)。
  • flex-direction屬性決定主軸的方向(即專案的排列方向)。
  • flex-wrap屬性定義,如果一條軸線排不下,如何換行。
  • flex-flow屬性是flex-direction屬性和flex-wrap屬性的簡寫形式,預設值為row nowrap。
  • justify-content屬性定義了專案在主軸上的對齊方式。
  • align-items屬性定義專案在交叉軸上如何對齊。
  • order屬性定義專案的排列順序。數值越小,排列越靠前,預設為0。
  • flex-grow屬性定義專案的放大比例,預設為0,即如果存在剩餘空間,也不放大。
  • flex-shrink屬性定義了專案的縮小比例,預設為1,即如果空間不足,該專案將縮小。
  • flex-basis屬性定義了在分配多餘空間之前,專案佔據的主軸空間(main size)。瀏覽器根據這個屬性,計算主軸是否有多餘空間。它的預設值為auto,即專案的本來大小。它可以設為跟width或height屬性一樣的值(比如350px),則專案將佔據固定空間。
  • flex屬性是flex-grow, flex-shrink 和 flex-basis的簡寫,預設值為0 1 auto。後兩個屬性可選。該屬性有兩個快捷值:auto (1 1 auto) 和 none (0 0 auto)。建議優先使用這個屬性,而不是單獨寫三個分離的屬性,因為瀏覽器會推算相關值。
  • align-self屬性允許單個專案有與其他專案不一樣的對齊方式,可覆蓋align-items屬性。預設值為auto,表示繼承父元素的align-items屬性,如果沒有父元素,則等同於stretch。

LESS

LESS語言特性


HTML

HTML5

W3C HTML5 教程
菜鳥教程 HTML5


webpack


Node


npm


相關文章