-
react 生命周期函數
初始化階段:
getDefaultProps:獲取實例的默認屬性
getInitialState:獲取每個實例的初始化狀態
componentWillMount:組件即將被裝載、渲染到頁面上(在整個生命周期中只會觸發一次)
render:組件在這里生成虛擬的 DOM 節點
componentDidMount:組件真正在被裝載之后(在整個生命周期中只會觸發一次)
運行中狀態: componentWillReceiveProps:組件將要接收到屬性的時候調用 shouldComponentUpdate:組件接受到新屬性或者新狀態的時候(可以返回 false,接收數據后不更新,阻止 render 調用,后面的函數不會被繼續執行了) componentWillUpdate:組件即將更新不能修改屬性和狀態 render:組件重新描繪 componentDidUpdate:組件已經更新
銷毀階段: componentWillUnmount:組件即將銷毀
-
為什么虛擬 dom 會提高性能?
虛擬 dom 相當於在 js 和真實 dom 中間加了一個緩存,利用 dom diff 算法避免了沒有必要的 dom 操作,從而提高性能。
用 JavaScript 對象結構表示 DOM 樹的結構;然后用這個樹構建一個真正的 DOM 樹,插到文檔當中當狀態變更的時候,重新構造一棵新的對象樹。
然后用新的樹和舊的樹進行比較,記錄兩棵樹差異把 2 所記錄的差異應用到步驟 1 所構建的真正的 DOM 樹上,視圖就更新了。
-
react diff 原理
把樹形結構按照層級分解,只比較同級元素。
給列表結構的每個單元添加唯一的 key 屬性,方便比較。
React 只會匹配相同 class 的 component(這里面的 class 指的是組件的名字)。
合並操作,調用 component 的 setState 方法的時候, React 將其標記為 dirty.到每一個事件循環結束, React 檢查所有標記 dirty 的 component 重新繪制.
選擇性子樹渲染。開發人員可以重寫 shouldComponentUpdate 提高 diff 的性能。
-
(組件的)狀態(state)和屬性(props)之間的區別
Props是一個屬性值,里面數據是不能改變的;
State是一個狀態機,根據數據的改變更改視圖。
-
refs 是什么?
Refs是能訪問DOM元素或組件實例的一個函數;
-
React 的工作原理
React 會創建一個虛擬 DOM(virtual DOM)。當一個組件中的狀態改變時,React 首先會通過 "diffing" 算法來標記虛擬 DOM 中的改變;
第二步是調節(reconciliation),會用 diff 的結果來更新 DOM。
-
什么是redux?
redux 是一個應用數據流框架,主要是解決了組件間狀態共享的問題,原理是集中式管理,主要有三個核心方法,action,store,reducer,
工作流程是 view 調用 store 的 dispatch 接收 action 傳入 store,reducer 進行 state 操作,view 通過 store 提供的 getState 獲取最新的數據。
新增 state,對狀態的管理更加明確,通過 redux,流程更加規范了,減少手動編碼量,提高了編碼效率,
同時缺點時當數據更新時有時候組件不需要,但是也要重新繪制,有些影響效率。
一般情況下,我們在構建多交互,多數據流的復雜項目應用時才會使用它們。
-
react-redux的實現原理
react-redux是一個輕量級的封裝庫,它主要通過兩個核心方法實現: Provider:從最外部封裝了整個應用,並向connect模塊傳遞store。 Connect: 1、包裝原組件,將state和action通過props的方式傳入到原組件內部。 2、監聽store tree變化,使其包裝的原組件可以響應state變化
-
redux-thunk
背景:Redux 的基本做法,是用戶發出 Action,Reducer 函數立刻算出新的 State,View 重新渲染,但這是做同步。
而如果有異步請求時,那就不能知道什么時候獲取的數據有存進store里面,因此此時需要在請求成功時返回一個標識或狀態,並在此時再觸發action給reducer傳值。
因此,為了解決異步的問題,就引入了中間件的概念。
redux-thunk 幫助你統一了異步和同步 action 的調用方式,把異步過程放在 action 中解決。
-
對webpack的理解
webpack是一個預編譯模塊方案,它會分析你的項目結構將其打包成適合瀏覽器加載的模塊。
打包原理:把所有依賴打包成一個bundle.js文件,通過代碼分割成單元片段並按需加載。
-
調用 setState 之后發生了什么
在代碼中調用setState函數之后,React 會將傳入的參數對象與組件當前的狀態合並,然后觸發所謂的調和過程(Reconciliation)。
經過調和過程,React 會以相對高效的方式根據新的狀態構建 React 元素樹並且着手重新渲染整個UI界面。
在 React 得到元素樹之后,React 會自動計算出新的樹與老樹的節點差異,然后根據差異對界面進行最小化重渲染。
在差異計算算法中,React 能夠相對精確地知道哪些位置發生了改變以及應該如何改變,這就保證了按需更新,而不是全部重新渲染。
-
React 中 keys 的作用
Keys 是 React 用於追蹤哪些列表中元素被修改、被添加或者被移除的輔助標識。
在開發過程中,我們需要保證某個元素的 key 在其同級元素中具有唯一性。
渲染同類型元素不帶key只會產生性能問題,如果渲染的是不同類型的狀態性組件,組件將會被替換,狀態丟失