【相關專題推薦:react面試題(2020)】
#1、redux中間件
答案:中間件提供第三方插件的模式,自訂攔截action -> reducer 的過程。變成 action -> middlewares -> reducer 。這種機制可以讓我們改變資料流,實現如非同步 action ,action 過濾,日誌輸出,異常報告等功能。
常見的中間件:redux-logger:提供日誌輸出;redux-thunk:處理非同步操作;redux-promise:處理非同步操作;actionCreator的回傳值是promise
2、redux有什麼缺點
答:1.一個元件所需的數據,必須由父元件傳過來,而不能像flux中直接從store取。
2.當一個元件相關資料更新時,即使父元件不需要用到這個元件,父元件還是會重新render,可能會有效率影響,或是需要寫複雜的shouldComponentUpdate來判斷。
3、react元件的分割業務元件技術元件?
答:依照元件的職責通常把元件分為UI元件和容器元件。 UI 元件負責 UI 的呈現,容器元件負責管理資料和邏輯。兩者透過React-Redux 提供connect方法連結起來。
4、react生命週期函數
答案:一、初始化階段:
getDefaultProps:取得實例的預設屬性
getInitialState:取得每個實例的初始化狀態
componentWillMount:元件即將被裝載、渲染到頁面上
render:元件在這裡產生虛擬的DOM節點
componentDidMount:元件真正在被裝載之後
二、運行中狀態:
componentWillReceiveProps:元件將要接收到屬性的時候呼叫
shouldComponentUpdate:元件接受到新屬性或新狀態的時候(可以傳回false ,接收資料後不更新,阻止render調用,後面的函數不會繼續執行了)
componentWillUpdate:元件即將更新不能修改屬性和狀態
render:元件重新描繪
componentDidUpdate:元件已經更新
三、銷毀階段:
componentWillUnmount:元件即將銷毀
5、react效能最佳化是哪個週期函數?
答案:shouldComponentUpdate 這個方法用來判斷是否需要呼叫render方法重新描繪dom。因為dom的描繪非常消耗性能,如果我們能在shouldComponentUpdate方法中能夠寫出更優化的dom diff演算法,可以極大的提高性能。
6、為什麼虛擬dom會提高效能?
答案:虛擬dom相當於在js和真實dom中間加了一個緩存,利用dom diff演算法避免了沒有必要的dom操作,從而提高性能。
具體實作步驟如下:
1.用JavaScript 物件結構表示DOM 樹的結構;然後用這個樹建構一個真正的DOM 樹,插到文檔當中;
#2.當狀態變更的時候,重新建構一棵新的物件樹。然後用新的樹和舊的樹進行比較,記錄兩棵樹差異;
把2所記錄的差異應用到步驟1所建構的真正的DOM樹上,視圖就更新了。
7、diff演算法?
答:1.把樹狀結構依照層級分解,只比較同級元素。
2.為清單結構的每個單元新增唯一的key屬性,方便比較。
3.React 只會匹配相同class 的component(這裡面的class指的是元件的名字)
4.合併操作,呼叫component 的setState 方法的時候, React 將其標記為dirty.到每一個事件循環結束, React 檢查所有標記dirty 的component 重新繪製.
6.選擇性子樹渲染。開發人員可以重寫shouldComponentUpdate提高diff的效能。
8、react效能最佳化方案
答案:1)重寫shouldComponentUpdate來避免不必要的dom操作。
2)使用 production 版本的react.js。
3)使用key來幫助React識別列表中所有子組件的最小變化
9、簡述flux 思想
回答:Flux 的最大特點,就是數據的"單向流動"。
1.使用者造訪View
2.View 發出使用者的Action
#3.Dispatcher 收到Action,要求Store 進行對應的更新
4 .Store 更新後,發出一個"change"事件
5.View 收到"change"事件後,更新頁面
10、React項目用過什麼腳手架? Mern? Yeoman?
答:Mern:MERN是腳手架的工具,它可以很容易地使用Mongo, Express, React and NodeJS產生同構JS應用。它最大限度地減少安裝時間,並得到您使用的成熟技術來加速開發。
11、你了解React嗎?
答案:了解,React是facebook搞出來的一個輕量級的元件庫,用來解決前端視圖層的一些問題,就是MVC中V層的問題,它內部的Instagram網站就是用React搭建的。
12、React解決了什麼問題?
答案:解決了三個問題: 1.元件重複問題, 2.效能問題,3.相容性問題:
13、React的協定?
答:React遵循的協議是“BSD許可證專利開源協議”,這個協議比較奇葩,如果你的產品跟facebook沒有競爭關係,你可以自由的使用react,但是如果有競爭關係,你的react的使用許可將會被取消
14、了解shouldComponentUpdate嗎?
答案:React虛擬dom技術要求不斷的將dom和虛擬dom進行diff比較,如果dom樹比價大,這種比較操作會比較耗時,因此React提供了shouldComponentUpdate這種補丁函數,如果對於一些變化,如果我們不希望某個元件刷新,或者刷新後跟原來其實一樣,就可以使用這個函數直接告訴React,省去diff操作,進一步的提高了效率。
15、React 的工作原理?
答案:React 會建立一個虛擬 DOM(virtual DOM)。當一個元件中的狀態改變時,React 首先會透過 "diffing" 演算法來標記虛擬 DOM 中的改變,第二步是調節(reconciliation),會用 diff 的結果來更新 DOM。
16、使用 React 有何優點?
答案:1.只要查看render 函數就會很容易知道一個元件是如何被渲染的
2.JSX 的引入,使得元件的程式碼更加可讀,也更容易看懂元件的佈局,或元件之間是如何互相引用的
3.支援服務端渲染,這可以改進SEO 和效能
4.易於測試
# 5.React 只專注於View 層,所以可以和其它任何框架(如Backbone.js, Angular.js)一起使用
17、展示元件(Presentational component)和容器元件(Container component)之間有何不同?
答案:1.展示元件關心元件看起來是什麼。展示專門透過 props 接受資料和回調,幾乎不會有自身的狀態,但當展示元件擁有自身的狀態時,通常也只關心 UI 狀態而不是資料的狀態。
2.容器元件則更關心元件是如何運作的。容器元件會為展示元件或其它容器元件提供資料和行為(behavior),它們會呼叫 Flux actions,並將其作為回調提供給展示元件。容器元件經常是有狀態的,因為它們是(其它元件的)資料來源
18、類別元件(Class component)和函數式元件(Functional component)之間有何不同?
答案:1.類別元件不僅允許你使用更多額外的功能,如元件本身的狀態和生命週期鉤子,也能讓元件直接存取store 並維持狀態
#2.當元件僅是接收props,並將元件自身渲染到頁面時,該元件就是一個'無狀態元件(stateless component)',可以使用一個純函數來建立這樣的元件。這種組件也被稱為啞組件(dumb components)或展示組件
19、(組件的)狀態(state)和屬性(props)之間有何不同?
答案:1. State 是一種資料結構,用於元件掛載時所需資料的預設值。 State 可能會隨著時間的推移而發生突變,但多數時候是作為使用者事件行為的結果。
2. Props(properties 的簡寫)則是組件的配置。 props 由父元件傳遞給子元件,並且就子元件而言,props 是不可變的(immutable)。元件不能改變自身的 props,但是可以把其子元件的 props 放在一起(統一管理)。 Props 也不僅僅是資料--回呼函數也可以透過 props 傳遞。
20、應該在 React 元件的何處發起 Ajax 請求?
答案:在 React 元件中,應該在 componentDidMount 中發起網路請求。這個方法會在元件第一次「掛載」(被加到 DOM)時執行,在元件的生命週期中只會執行一次。更重要的是,你不能保證在元件掛載之前 Ajax 請求已經完成,如果是這樣,也意味著你會嘗試在一個未掛載的元件上呼叫 setState,這將不起作用。在 componentDidMount 中發起網路請求將保證這有一個元件可以更新了。
21、何為受控元件(controlled component)?
答案;在 HTML 中,類似 ,
22、在 React 中,refs 的作用是什麼?
答案:Refs 可以用來取得 DOM 節點或 React 元件的參考。何時使用 refs 的好的範例有管理焦點/文字選擇,觸發命令動畫,或和第三方 DOM 庫整合。你應該避免使用 String 類型的 Refs 和內聯的 ref 回呼。 Refs 回呼是 React 所推薦的。
23、何為高階元件(higher order component)?
答案:高階元件是一個以元件為參數並傳回一個新元件的函數。 HOC 運行你重複使用程式碼、邏輯和引導抽象。最常見的可能是 Redux 的 connect 函數。除了簡單分享工具庫和簡單的組合,HOC最好的方式是共享 React 元件之間的行為。如果你發現你在不同的地方寫了大量程式碼來做同一件事時,就應該考慮將程式碼重構為可重複使用的 HOC。
24. 使用箭頭函數(arrow functions)的優點是什麼?
答案:1. 作用域安全性:在箭頭函數之前,每一個新建立的函數都有定義自身的this 值(在建構函數中是新物件;在嚴格模式下,函數呼叫中的this 是未定義的;如果函數被稱為“物件方法”,則為基礎物件等),但箭頭函數不會,它會使用封閉執行上下文的this 值。
2. 簡單:箭頭函數易於閱讀和書寫
3. 清晰:當一切都是一個箭頭函數,任何常規函數都可以立即用於定義作用域。開發者總是可以尋找 next-higher 函數語句,以查看 this 的值
25、為什麼建議傳遞給 setState 的參數是一個 callback 而不是一個物件?
答案:因為 this.props 和 this.state 的更新可能是異步的,不能依賴它們的值去計算下一個 state。
26、除了在建構子中綁定 this,還有其方式嗎?
答案:可以使用屬性初始值設定項目(property initializers)來正確綁定回調,create-react-app 也是預設支援的。在回調中你可以使用箭頭函數,但問題是每次元件渲染時都會建立一個新的回呼。
27、怎麼阻止元件的渲染?
答案:在元件的 render 方法中傳回 null 並不會影響觸發元件的生命週期方法
28、當渲染一個清單時,何為 key?設定 key 的目的是什麼?
答案:Keys 會有助於 React 辨識哪些 items 改變了,被加入了或被移除了。 Keys 應該被賦予數組內的元素以賦予(DOM)元素一個穩定的標識,選擇一個 key 的最佳方法是使用一個字串,該字串能惟一地標識一個列表項。很多時候你會使用資料中的IDs 作為keys,當你沒有穩定的IDs 用於被渲染的items 時,可以使用項目索引作為渲染項目的key,但這種方式並不推薦,如果items 可以重新排序,就會導致re-render 變慢
29、(在建構函式中)呼叫super(props) 的目的是什麼?
答案:在 super() 被呼叫之前,子類別是不能使用 this 的,在 ES2015 中,子類別必須在 constructor 中呼叫 super()。傳遞 props 給 super() 的原因則是便於(在子類別中)能在 constructor 存取 this.props。
30、何為 JSX ?
答案:JSX 是 JavaScript 語法的一種語法擴展,並擁有 JavaScript 的全部功能。 JSX 生產 React "元素",你可以將任何的 JavaScript 運算式封裝在花括號裡,然後將其嵌入到 JSX 中。在編譯完成之後,JSX 表達式變成了常規的 JavaScript 對象,這意味著你可以在 if 語句和 for 循環內部使用 JSX,將它賦值給變量,接受它作為參數,並從函數中返回它。
31 何為 Children ?
答案:在JSX表達式中,一個開始標籤(例如)和一個關閉標籤(例如)之間的內容會作為一個特殊的屬性props.children被自動傳遞給包含著它的組件。
這個屬性有許多可用的方法,包括 React.Children.map,React.Children.forEach, React.Children.count, React.Children.only,React.Children.toArray。
32、在 React 中,何為 state?
答案:State 和 props 類似,但它是私有的,並且完全由元件本身控制。 State 本質上是一個持有數據,並決定元件如何渲染的物件。
33、什麼原因會促使你脫離 create-react-app 的依賴?
答案;當你想去設定 webpack 或 babel presets。
34、何為 redux ?
答案:Redux 的基本概念是整個應用的 state 保持在單一的 store 中。 store 是一個簡單的 javascript 對象,而改變應用 state 的唯一方法是在應用程式中觸發 actions,然後為這些 actions 編寫 reducers 來修改 state。整個 state 轉換是在 reducers 中完成,並且不應該有任何副作用
35、在 Redux 中,何為 store ?
答案:Store 是一個 javascript 對象,它保存了整個應用的 state。同時,Store 也承擔以下職責:
- 允許透過getState() 存取state
- 運行透過dispatch(action) 改變state
- 透過subscribe(listener ) 註冊listeners
- 透過subscribe(listener) 傳回的函式處理listeners 的註解
36、何為action ?
答案;Actions 是一個純 javascript 對象,它們必須有一個 type 屬性來表明正在執行的 action 的類型。實質上,action 是將資料從應用程式傳送到 store 的有效載荷。
37、何為 reducer ?
答案:一個 reducer 是一個純函數,該函數以先前的 state 和一個 action 作為參數,並傳回下一個 state。
38、Redux Thunk 的作用是什麼?
答案:Redux thunk 是一個允許你寫一個回傳一個函數而不是一個 action 的 actions creators 的中間件。如果滿足某個條件,thunk 則可以用來延遲 action 的派發(dispatch),這可以處理非同步 action 的派發(dispatch)。
39、何為純函數(pure function)?
答:一個純函數是一個不依賴且不改變其作用域之外的變數狀態的函數,這也意味著一個純函數對於同樣的參數總是會傳回同樣的結果。
更多程式相關內容,請關注php中文網程式入門欄位!
以上是一些關於React的常見面試問題(分享)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

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

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

Atom編輯器mac版下載
最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。