react面試時會有哪些問題? react面試常見問題的詳細的分析解答
本篇文章主要的介紹了關於react中的常見問題分析,有問題還有答案,點進來看看有沒有其中一個問題是可以給大家解惑的。現在就讓我們一起來看這篇文章吧
1、React 中 Element 與 Component 的差別是?
官網文件對於Element的解釋是:
Elements are the smallest building blocks of React apps. An element describes what you want to see on the screen:
官網對於Compent的解釋是:
Components let you split the UI into independent, reusable pieces, and think about each piece in isolation. Conceptually, components are like JavaScript functions. They accept arbitrary inputs (called "props") and return React elements describing what should appear on the screen.
也就是說,React Element 是描述畫面上所見內容的資料結構,是對於UI 的物件表述。典型的 React Element 就是利用 JSX 建構的宣告式程式碼片然後被轉換為createElement的呼叫組合。而 React Component 則是可以接收參數輸入並且傳回某個 React Element 的函數或類別。
2、JSX
React 使用 JSX 來取代常規的 JavaScript。 JSX 是一個看起來很像 XML 的 JavaScript 語法擴充。我們不需要一定使用 JSX,但它有以下優點:
JSX 执行更快,因为它在编译为 JavaScript 代码后进行了优化。 它是类型安全的,在编译过程中就能发现错误。 使用 JSX 编写模板更加简单快速。
3、呼叫 setState 之後發生了什麼?
在程式碼中呼叫setState函數之後,React 會將傳入的參數物件與元件目前的狀態合併,然後觸發所謂的調和過程(Reconciliation)。經過調和過程,React 會以相對高效的方式根據新的狀態建立 React 元素樹並且著手重新渲染整個UI介面。在 React 得到元素樹之後,React 會自動計算出新的樹與老樹的節點差異,然後根據差異對介面進行最小化重渲染。在差異計算演算法中,React 能夠相對精確地知道哪些位置發生了變化以及應該如何改變,這保證了按需更新,而不是全部重新渲染。
4、在什麼情況下你會優先選擇使用 Class Component 而不是 Functional Component?
在元件需要包含內部狀態或使用到生命週期函數的時候使用 Class Component ,否則使用函數式元件。
5、在生命週期中的哪一步你應該發起 AJAX 請求?
我們應該將AJAX 請求放到componentDidMount 函數中執行,主要原因有下:
React 下一代調和演算法Fiber 會透過開始或停止渲染的方式優化應用效能,其會影響到componentWillMount 的觸發次數。對於 componentWillMount 這個生命週期函數的呼叫次數會變得不確定,React 可能會多次頻繁地呼叫 componentWillMount。如果我們將 AJAX 請求放到 componentWillMount 函數中,那麼顯而易見其會被觸發多次,自然也就不是好的選擇。
如果我們將 AJAX 請求放置在生命週期的其他函數中,我們並不能保證請求僅在元件掛載完畢後才會要求回應。如果我們的資料請求在元件掛載之前就完成,並且呼叫了setState函數將資料新增至元件狀態中,對於未掛載的元件則會報錯。而在 componentDidMount 函數中進行 AJAX 請求則能有效避免這個問題。 (想看更多就到PHP中文網React參考手冊欄位學習)
6、Controlled Component 與 Uncontrolled Component 之間的差異是什麼?
React 的核心組成之一是能夠維持內部狀態的自治元件,不過當我們引入原生的HTML表單元素時(input,select,textarea 等),我們是否應該將所有的數據託管到React 元件中還是將其仍保留在DOM 元素中呢?這個問題的答案就是受控組件與非受控組件的定義分割。受控元件(Controlled Component)代指那些交由 React 控制並且所有的表單資料統一存放的元件。也就是說,React.js 中的<input /> 、<textarea />、<select />
等元素的value 值如果受到React.js 的控制,那麼就是受控組件。譬如下面這段程式碼中username變數值並沒有存放到DOM元素中,而是存放在元件狀態資料中。任何時候我們需要改變username變數值時,我們應該當呼叫setState函數進行修改。
class ControlledForm extends Component { state = { username: '' } updateUsername = (e) => { this.setState({ username: e.target.value, }) } handleSubmit = () => {} render () { return ( <form onSubmit={this.handleSubmit}> <input type='text' value={this.state.username} onChange={this.updateUsername} /> <button type='submit'>Submit</button> </form> ) } }
而非受控元件(Uncontrolled Component)則是由DOM存放表單數據,並非存放在 React 元件中。我們可以使用 refs 來操控DOM元素:
class UnControlledForm extends Component { handleSubmit = () => { console.log("Input Value: ", this.input.value) } render () { return ( <form onSubmit={this.handleSubmit}> <input type='text' ref={(input) => this.input = input} /> <button type='submit'>Submit</button> </form> ) } }
竟然非受控元件看上去更好實現,我們可以直接從 DOM 中抓取數據,而不需要添加額外的程式碼。不過實際開發中我們並不提倡使用非受控組件,因為實際情況下我們需要更多的考慮表單驗證、選擇性的開啟或關閉按鈕點擊、強制輸入格式等功能支持,而此時我們將資料託管到React 中有助於我們更好地以宣告式的方式完成這些功能。引入 React 或其他 MVVM 框架最初的原因是為了將我們從繁重的直接操作 DOM 中解放出來。
7、shouldComponentUpdate 的作用是啥、為何它這麼重要?
shouldComponentUpdate 允许我们手动地判断是否要进行组件更新,根据组件的应用场景设置函数的合理返回值能够帮我们避免不必要的更新。
8、概述下 React 中的事件处理逻辑
为了解决跨浏览器兼容性问题,React 会将浏览器原生事件(Browser Native Event)封装为合成事件(SyntheticEvent)传入设置的事件处理器中。这里的合成事件提供了与原生事件相同的接口,不过它们屏蔽了底层浏览器的细节差异,保证了行为的一致性。另外有意思的是,React 并没有直接将事件附着到子元素上,而是以单一事件监听器的方式将所有的事件发送到顶层进行处理。这样 React 在更新 DOM 的时候就不需要考虑如何去处理附着在 DOM 上的事件监听器,最终达到优化性能的目的。
9、传入 setState 函数的第二个参数的作用是什么?
该函数会在setState函数调用完成并且组件开始重渲染的时候被调用,我们可以用该函数来监听渲染是否完成:
this.setState( { username: 'tylermcginnis33' }, () => console.log('setState has finished and the component has re-rendered.') )
10、组件的生命周期
组件的生命周期分成三个状态:
Mounting:已插入真实 DOM Updating:正在被重新渲染 Unmounting:已移出真实 DOM
React 为每个状态都提供了两种处理函数,will 函数在进入状态之前调用,did 函数在进入状态之后调用,三种状态共计五种处理函数。
componentWillMount()componentDidMount()componentWillUpdate(object nextProps, object nextState)componentDidUpdate(object prevProps, object prevState)componentWillUnmount()
此外,React 还提供两种特殊状态的处理函数。
componentWillReceiveProps(object nextProps):已加载组件收到新的参数时调用shouldComponentUpdate(object nextProps, object nextState):组件判断是否重新渲染时调用
本篇文章到这就结束了(想看更多就到PHP中文网React使用手册栏目中学习),有问题的可以在下方留言提问。
以上是react面試時會有哪些問題? react面試常見問題的詳細的分析解答的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

React前後端分離指南:如何實現前後端的解耦和獨立部署,需要具體程式碼範例在當今的Web開發環境中,前後端分離已經成為一種趨勢。透過將前端和後端程式碼分開,可以讓開發工作更加靈活、高效,並且方便進行團隊協作。本文將介紹如何使用React實現前後端分離,從而實現解耦和獨立部署的目標。首先,我們要先理解什麼是前後端分離。傳統的Web開發模式中,前端和後端是耦合在

如何利用React和Flask建構簡單易用的網路應用引言:隨著網路的發展,網路應用的需求也越來越多樣化和複雜化。為了滿足使用者對於易用性和效能的要求,使用現代化的技術堆疊來建立網路應用變得越來越重要。 React和Flask是兩個在前端和後端開發中非常受歡迎的框架,它們可以很好的結合在一起,用來建立簡單易用的網路應用。本文將詳細介紹如何利用React和Flask

如何利用React和RabbitMQ建立可靠的訊息傳遞應用程式引言:現代化的應用程式需要支援可靠的訊息傳遞,以實現即時更新和資料同步等功能。 React是一種流行的JavaScript庫,用於建立使用者介面,而RabbitMQ是一種可靠的訊息傳遞中間件。本文將介紹如何結合React和RabbitMQ建立可靠的訊息傳遞應用,並提供具體的程式碼範例。 RabbitMQ概述:

ReactRouter使用指南:如何實現前端路由控制隨著單頁應用的流行,前端路由成為了一個不可忽視的重要部分。 ReactRouter作為React生態系統中最受歡迎的路由庫,提供了豐富的功能和易用的API,使得前端路由的實作變得非常簡單和靈活。本文將介紹ReactRouter的使用方法,並提供一些具體的程式碼範例。安裝ReactRouter首先,我們需要

如何利用React和ApacheKafka來建立即時資料處理應用介紹:隨著大數據與即時資料處理的興起,建構即時資料處理應用成為了許多開發者的追求。 React作為一個流行的前端框架,與ApacheKafka作為一個高效能的分散式訊息系統的結合,可以幫助我們建立即時資料處理應用。本文將介紹如何利用React和ApacheKafka建構即時資料處理應用,並

PHP、Vue和React:如何選擇最適合的前端框架?隨著互聯網技術的不斷發展,前端框架在Web開發中起著至關重要的作用。 PHP、Vue和React作為三種代表性的前端框架,每一種都具有其獨特的特徵和優勢。在選擇使用哪種前端框架時,開發人員需要根據專案需求、團隊技能和個人偏好做出明智的決策。本文將透過比較PHP、Vue和React這三種前端框架的特徵和使

Java框架與React框架的整合:步驟:設定後端Java框架。建立專案結構。配置建置工具。建立React應用程式。編寫RESTAPI端點。配置通訊機制。實戰案例(SpringBoot+React):Java程式碼:定義RESTfulAPI控制器。 React程式碼:取得並顯示API回傳的資料。

如何利用React開發一個響應式的後台管理系統隨著互聯網的快速發展,越來越多的企業和組織需要一個高效、靈活、易於管理的後台管理系統來處理日常的操作事務。 React作為目前最受歡迎的JavaScript庫之一,提供了一種簡潔、高效和可維護的方式來建立使用者介面。本文將介紹如何利用React開發一個響應式的後台管理系統,並給出具體的程式碼範例。建立React專案首先
