react面試題(一)


  • 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只會產生性能問題,如果渲染的是不同類型的狀態性組件,組件將會被替換,狀態丟失

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM