這篇文章帶給大家的內容是關於(收藏)react常用面試題的介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
下面是一個常用的關於React 的面試問題清單:
無論身為一個面試者,或是招募官,下面這些問題都可以去參考
務必收藏
React 的工作原理
React 會建立一個虛擬DOM(virtual DOM)。當一個元件中的狀態改變時,React 首先會透過 "diffing" 演算法來標記虛擬 DOM 中的改變,第二步是調節(reconciliation),會用 diff 的結果來更新 DOM。
使用React 有何優點
只需查看render 函數就會很容易知道一個元件是如何被渲染的
JSX 的引入,使得元件的程式碼更可讀,也更容易看懂元件的佈局,或者元件之間是如何互相引用的
支援服務端渲染,這可以改進SEO 和效能
易於測試
React 只專注於View 層,所以可以和其它任何框架(如Backbone.js, Angular.js)一起使用
展示元件(Presentational component)和容器元件(Container component)之間有何不同
展示元件關心元件看起來是什麼。展示專門透過 props 接受資料和回調,幾乎不會有自身的狀態,但當展示元件擁有自身的狀態時,通常也只關心 UI 狀態而不是資料的狀態。
容器元件則更關心元件是如何運作的。容器元件會為展示元件或其它容器元件提供資料和行為(behavior),它們會呼叫 Flux actions
,並將其作為回調提供給展示元件。容器元件經常是有狀態的,因為它們是(其它元件的)資料來源。
類別元件(Class component)和函式元件(Functional component)之間有何不同
類別元件不僅允許你使用更多額外的功能,例如元件本身的狀態和生命週期鉤子,也能讓元件直接存取store 並維持狀態
當元件僅是接收props,並將元件本身渲染到頁面時,元件就是一個'無狀態元件(stateless component) ',可以使用一個純函數來創建這樣的元件。這種元件也被稱為啞組件(dumb components)或展示元件
(元件的)狀態(state)和屬性(props)之間有何不同
State是一種資料結構,用於組件掛載時所需資料的預設值。 State 可能會隨著時間的推移而發生突變,但多數時候是作為使用者事件行為的結果。
Props(properties 的簡寫)則是元件的配置。 props 由父元件傳遞給子元件,並且就子元件而言,props 是不可變的(immutable)。元件不能改變自身的 props,但是可以把其子元件的 props 放在一起(統一管理)。 Props 也不僅僅是資料--回呼函數也可以透過 props 傳遞。
指出(元件)生命週期方法的不同
componentWillMount -- 多用於根元件中的應用程式配置
componentDidMount -- 在這可以完成所有沒有DOM 就不能做的所有配置,並開始獲取所有你需要的資料;如果需要設定事件監聽,也可以在這完成
componentWillReceiveProps -- 這個週期函數作用於特定的prop 改變導致的state轉換
shouldComponentUpdate -- 如果你擔心元件過度渲染,shouldComponentUpdate 是一個改善效能的地方,因為如果元件接收了新的prop, 它可以阻止(元件)重新渲染。 shouldComponentUpdate 應該傳回一個布林值來決定元件是否要重新渲染
componentWillUpdate -- 很少使用。它可以用來代替元件的componentWillReceiveProps 和shouldComponentUpdate(但不能存取之前的props)
componentDidUpdate -- 常用於更新DOM,回應prop 或state 的改變
componentWillUnmount -- 在這你可以取消網路請求,或移除所有與元件相關的事件監聽器
應該在 React 元件的何處發起 Ajax 請求
在 React 元件中,應該在 componentDidMount 中發起網路請求。這個方法會在元件第一次「掛載」(被加到 DOM)時執行,在元件的生命週期中只會執行一次。更重要的是,你不能保證在元件掛載之前 Ajax 請求已經完成,如果是這樣,也意味著你將嘗試在一個未掛載的元件上呼叫 setState,這將無法運作。在 componentDidMount 中發起網路請求將保證這有一個元件可以更新了。
何為受控元件(controlled component)
在HTML 中,類似,
在 React 中,refs 的作用是什麼
Refs 可以用來取得一個 DOM 節點或 React 元件的參考。何時使用 refs 的好的範例有管理焦點/文字選擇,觸發命令動畫,或和第三方 DOM 庫整合。你應該避免使用 String 類型的 Refs 和內聯的 ref 回呼。 Refs 回呼是 React 所推薦的。
何為高階元件(higher order component)
高階元件是一個以元件為參數並傳回一個新元件的函數。 HOC 運行你重複使用程式碼、邏輯和引導抽象。最常見的可能是 Redux 的 connect 函數。除了簡單分享工具庫和簡單的組合,HOC最好的方式是共享 React 元件之間的行為。如果你發現你在不同的地方寫了大量程式碼來做同一件事時,就應該考慮將程式碼重構為可重複使用的 HOC。
練習
寫一個反轉其輸入的HOC
寫一個從API 提供資料給傳入的元件的HOC
寫一個實作shouldComponentUpdate來避免reconciliation 的HOC
寫一個透過React.Children.toArray 對傳入元件的子元件進行排序的HOC
使用箭頭函數(arrow functions)的優點是什麼
作用域安全性:在箭頭函數之前,每一個新建立的函數都有定義自身的this 值(在建構函數中是新物件;在嚴格模式下,函數呼叫中的this 是未定義的;如果函數被稱為“物件方法”,則為基礎物件等),但箭頭函數不會,它會使用封閉執行上下文的this 值。
簡單:箭頭函數易於閱讀和書寫
清晰:當一切都是一個箭頭函數,任何常規函數都可以立即用於定義作用域。開發者總是可以尋找 next-higher 函數語句,以查看 this 的值
為什麼建議傳遞給 setState 的參數是一個 callback 而不是一個物件
因為 this.props 和 this.state 的更新可能是異步的,不能依賴它們的值去計算下一個 state。
除了在建構子中綁定this
,還有其它方式嗎
#你可以使用屬性初始值設定項(property initializers)來正確綁定回調,create-react-app 也是預設支援的。在回調中你可以使用箭頭函數,但問題是每次元件渲染時都會建立一個新的回呼。
怎麼阻止元件的渲染
在元件的render 方法中回傳null 並不會影響觸發元件的生命週期方法
當渲染一個清單時,何為key ?設定 key 的目的是什麼
Keys 會有助於 React 識別哪些 items 改變了,被加入了或被移除了。 Keys 應該被賦予數組內的元素以賦予(DOM)元素一個穩定的標識,選擇一個 key 的最佳方法是使用字串,該字串能惟一地標識一個列表項。很多時候你會使用資料中的 IDs 作為 keys,當你沒有穩定的 IDs 當用於被渲染的 items 時,可以使用項目索引作為渲染項目的 key,但這種方式並不推薦,如果 items 可以重新排序,就會導致 re-render 變慢。
(在建構子中)呼叫super(props) 的目的是什麼
在super() 被呼叫之前,子類別是不能使用this 的,在ES2015 中,子類別必須在constructor 中呼叫super()。傳遞 props 給 super() 的原因則是便於(在子類別中)能在 constructor 存取 this.props。
何為 JSX
JSX 是 JavaScript 語法的一種語法擴展,並擁有 JavaScript 的全部功能。 JSX 生產 React "元素",你可以將任何的 JavaScript 表達式封裝在花括號裡,然後將其嵌入到 JSX 中。在編譯完成之後,JSX 表達式就變成了常規的 JavaScript 對象,這意味著你可以在 if 語句和 for 循環內部使用 JSX,將它賦值給變量,接受它作為參數,並從函數中返回它。
怎麼用React.createElement 重寫下面的程式碼
Question:
const element = ( <h1> Hello, rdhub.cn! </h1> );
Answer:
const element = React.createElement( 'h1', {className: 'greeting'}, 'Hello, rdhub.cn!' );
何為Children
在JSX表達式中,一個開始標籤(例如)和一個關閉標籤(例如)之間的內容會作為一個特殊的屬性props.children被自動傳遞給包含著它的組件。
這個屬性有許多可用的方法,包括 React.Children.map,React.Children.forEach, React.Children.count, React.Children.only,React.Children.toArray。
在 React 中,何為 state
State 和 props 類似,但它是私有的,並且完全由元件本身控制。 State 本質上是一個持有數據,並決定元件如何渲染的物件。
什麼原因會促使你脫離 create-react-app 的依賴
當你想要去設定 webpack 或 babel presets。
何為 redux
Redux 的基本想法是整個應用程式的 state 保持在單一的 store 中。 store 就是一個簡單的 javascript 對象,而改變應用 state 的唯一方法是在應用程式中觸發 actions,然後為這些 actions 編寫 reducers 來修改 state。整個 state 轉換是在 reducers 中完成,並且不應該有任何副作用。
在 Redux 中,何為 store
Store 是一個 javascript 對象,它保存了整個應用的 state。同時,Store 也承擔以下職責:
允許透過getState() 存取state
運行透過dispatch(action) 改變state
透過subscribe(listener) 註冊listeners
透過subscribe(listener) 傳回的函數處理listeners 的註銷
何為action
Actions 是一個純javascript 對象,它們必須有一個type 屬性表明正在執行的action 的類型。實質上,action 是將資料從應用程式傳送到 store 的有效載荷。
何為 reducer
一個 reducer 是一個純函數,該函數以先前的 state 和一個 action 為參數,並傳回下一個 state。
Redux Thunk 的作用是什麼
Redux thunk 是一個允許你寫一個回傳一個函數而不是一個 action 的 actions creators 的中間件。如果滿足某個條件,thunk 則可以用來延遲 action 的派發(dispatch),這可以處理非同步 action 的派發(dispatch)。
何為純函數(pure function)
一個純函數是一個不依賴且不改變其作用域之外的變數狀態的函數,這也意味著一個純函數對於同樣的參數總是會傳回同樣的結果。
#以上是(收藏)react常用面試題的介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

是的,JavaScript的引擎核心是用C語言編寫的。 1)C語言提供了高效性能和底層控制,適合JavaScript引擎的開發。 2)以V8引擎為例,其核心用C 編寫,結合了C的效率和麵向對象特性。 3)JavaScript引擎的工作原理包括解析、編譯和執行,C語言在這些過程中發揮關鍵作用。

JavaScript是現代網站的核心,因為它增強了網頁的交互性和動態性。 1)它允許在不刷新頁面的情況下改變內容,2)通過DOMAPI操作網頁,3)支持複雜的交互效果如動畫和拖放,4)優化性能和最佳實踐提高用戶體驗。

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

記事本++7.3.1
好用且免費的程式碼編輯器

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器