React

什么時候使用功能組件( Functional? Component ),使用類組件( Class? Component )?

如果您的組件具有狀態( state )或生命周期方法,請使用 Class 組件。否則,使用功能組件

在哪個生命周期事件中發出 AJAX 請求?

AJAX 請求應該在componentDidMount生命周期事件中。 有幾個原因:

Fiber,是下一次實施React的和解算法,將有能力根據需要啟動和停止渲染,以獲得性能優勢。其中一個取舍之一是componentWillMount,而在其他的生命周期事件中出發 AJAX 請求,將是具有 “非確定性的”。 這意味著 React 可以在需要時感覺到不同的時間開始調用 componentWillMount。這顯然是AJAX請求的不好的方式。

-您不能保證在組件掛載之前,AJAX請求將無法 resolve。如果這樣做,那意味著你會嘗試在一個未掛載的組件上設置 StState,這不僅不會起作用,反而會對你大喊大叫。 在componentDidMount中執行 AJAX 將保證至少有一個要更新的組件。

shouldComponentUpdate 的作用?

在生命周期方法 shouldComponentUpdate 中,允許我們選擇退出某些組件(和他們的子組件)的 reconciliation 過程

“和解( reconciliation )的最終目標是以最有效的方式,根據新的狀態更新用戶界面”。如果我們知道用戶界面(UI)的某一部分不會改變,那么沒有理由讓 React 再去弄清楚它是否應該渲染。通過從 shouldComponentUpdate 返回 false,React 將假定當前組件及其所有子組件將保持與當前組件相同

shouldComponentUpdate 用來判斷是否需要調用render方法重新描繪dom。因為dom的描繪非常消耗性能,如果在這個方法中能夠寫出更優化的dom diff算法,就可以極大的提高性能。

組件的生命周期為:

初始化:

????getDefaultProps: 獲取實例的默認屬性

????getInitialState: 獲取每個實例的初始化狀態

掛載階段:

????constructor()??

????componentWillMount()?組件即將被裝載、渲染到頁面上

????render()??組件生成虛擬的DOM節點

????componentDidMount()??組件真正在被裝載之后

更新階段為:

????componentWillReceiveProps()? ??組件將要接收到屬性的時候調用

????shouldComponentUpdate()? ?組件接受到新屬性或者新狀態的時候(可以返回false,接收數據后不更新,阻止render調用,后面的函數不會被繼續執行)

????componentWillUpdate()? ?組件即將更新不能修改屬性和狀態

????render()? ? ?組件重新描繪

????componentDidUpdate? ?組件已經更新

銷毀階段:

? ??componentWillUnmount? ?組件即將銷毀

受控組件( controlled component )與不受控制的組件( uncontrolled component )有什么區別

受控組件是React控制的組件,也是表單數據的唯一真理來源

受控組件

不受控制( uncontrolled component )的組件是您的表單數據由 DOM 處理,而不是您的 React 組件

不受控制的組件

React 中的keys是什么,為什么它們很重要?

keys是什么幫助 React 跟蹤哪些項目已更改、添加或從列表中刪除

什么是 React 的 refs

refs就像是一個逃生艙口,允許直接訪問DOM元素或組件實例

向組件添加一個?ref?屬性,該屬性的值是一個回調函數,它將接收底層的 DOM 元素或組件的已掛接實例,作為其第一個參數

在 React 當中 Element 和 Component 有何區別?

簡單地說,一個React element描述了你想在屏幕上看到什么。換個說法就是,一個React element是一些 UI 的對象表示

一個React Component是一個函數或一個類,它可以接受輸入并返回一個React elementt(通常是通過 JSX ,它被轉化成一個 createElement 調用)

當調用setState的時候,發生了什么?

當調用setState時,React會做的第一件事情是將傳遞給setState的對象合并到組件的當前狀態。這將啟動一個稱為和解(reconciliation)的過程。和解(reconciliation)的最終目標是以最有效的方式,根據這個新的狀態來更新UI。 為此,React將構建一個新的React元素樹(您可以將其視為 UI 的對象表示)。

一旦有了這個樹,為了弄清 UI 如何響應新的狀態而改變,React 會將這個新樹與上一個元素樹相比較(diff)。

通過這樣做, React 將會知道發生的確切變化,并且通過了解發生什么變化,只需在絕對必要的情況下進行更新即可最小化 UI 的占用空間。



React 基礎

一、環境搭建 創建項目

npx create-react-app my-app? #創建一個react項目

cd my-app

npm start

二、jsx 語法

????JSX 防注入攻擊

三、面向數據編程

?React 的基本原理:組件(components),屬性(props)和狀態(state)

1.?React是一個聲明式的,高效的,并且靈活的用于構建用戶界面的 JavaScript 庫。它允許您使用”components(組件)“(小巧而獨立的代碼片段)組合出各種復雜的UI。

2.?組件接收參數,稱為?props(屬性),通過 Props 傳遞數據,并通過?render?方法返回一個顯示的視圖層次結構,render?方法返回您要渲染的內容描述,然后 React 接受該描述并將其渲染到屏幕上。

3.?React 開發人員使用一種名為 JSX (JavaScript XML)的特殊語法,可以更容易地編寫這些結構

4.?React 組件可以通過在構造函數中設置?this.state?來擁有 state(狀態) ,構造函數應該被認為是組件的私有。

5.?在?JavaScript classes(類)中, 在定義子類的構造函數時,你需要始終調用?super?。所有具有constructor?的 React 組件類都應該以?super(props)?調用啟動它

6.?要從多個子級收集數據 或 使兩個子組件之間相互通信,您需要在其父組件中聲明共享 state(狀態) 。父組件可以使用props(屬性) 將 state(狀態) 傳遞回子節點;這可以使子組件彼此同步并與父組件保持同步。

7.?數據自頂向下流動

????父組件通過 屬性的形式向子組件傳遞參數 子組件通過props接收父組件傳來的參數

????子組件想要和父組件通信 要調用父組件傳遞過來的方法

四、Component 組件

生命周期

Mounted:React Components 被render解析生成對應的DOM節點 并被插入瀏覽器的DOM結構的過程

Update:一個mounted的React Components被重新render的過程

Unmounted:一個mounted的React Components對應的DOM節點被從DOM結構中移除的過程

每一個狀態React都封裝了hook(鉤子)函數

lifecycle

生命周期鉤子:

???componentDidMount?:掛載函數

???componentWillUnmount:卸載函數



React 使用Redux數據流

React 是純V層框架 需要數據流進行支撐

主流數據流框架: Flux / reFlux? /? Redux

Redux優勢:簡單 / 單一狀態樹

flux是單向數據流
redux完整流程
react 基礎

redux 安裝:

? ? npm install react-redux redux

????資料:? ? https://redux.js.org/

react-redux 框圖

react-redux 項目結構:

? ? -- actions??

? ? -- components?

? ? -- container

? ? -- reducer?

? ? - index.html

? ? - server.js

? ? - webpack

action 、reducer、store介紹:

action
reducer
store

組件:

使用yeoman 構建項目

npm install -g yo? ? ? #安裝yeoman

yo --version? ?#查看版本

npm install -g generator-react-webpack? #安裝generator

npm ls -g --depth=1 2>/dev/null | grep generator-? ? ? #列出npm安裝的全局generator包

yo react-webpack gallery-by-react? ? ?#新建名叫gallery-by-react 的項目

cd??gallery-by-react??

npm run start? ? ? ?#運行項目


構建工具:grunt 、webpack 、browserify、gulp

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,202評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,742評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,297評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,688評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,875評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,438評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,183評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,384評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,612評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,093評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,330評論 2 377

推薦閱讀更多精彩內容

  • React.js的Rails開發者指南 原作者:Fernando Villalobos 原文鏈接:https://...
    不知道為啥被屏蔽閱讀 3,715評論 0 24
  • 函數是面向過程的,函數的調用不需要主體,而方法是屬于對象的,調用方法需要一個主體-即對象。 npm install...
    Gukson666閱讀 479評論 0 3
  • 在上一篇文章:React.js的基礎知識及一些demo(一)中,我們介紹了React.js的元素、JSX語法、組件...
    初漾流影閱讀 990評論 0 3
  • 感恩大恩上師及諸佛菩薩的慈悲加持與護佑; 感恩歷代宗親及父母的養育之恩; 感恩格西老師、張慧老師帶領我們學習金剛智...
    希熱拉嘎閱讀 167評論 0 0
  • why is it so hard to forget you,a year of tears is not en...
    Sahar于昔閱讀 128評論 0 0