本文小編為大家詳細(xì)介紹“Redux面試題及答案有哪些”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Redux面試題及答案有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。
通榆網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
1、Redux是什么?
Redux是當(dāng)今市場上最熱門的前端開發(fā)庫之一。
它是JavaScript應(yīng)用程序的可預(yù)測狀態(tài)容器,用于整個(gè)應(yīng)用程序的狀態(tài)管理。
使用Redux開發(fā)的應(yīng)用程序易于測試,可以在不同的環(huán)境中運(yùn)行,表現(xiàn)出一致的行為。
2、Redux遵循的三個(gè)原則是什么?
單個(gè)事實(shí)來源:整個(gè)應(yīng)用程序的狀態(tài)存儲(chǔ)在單個(gè)存儲(chǔ)中的對象/狀態(tài)樹中。
單狀態(tài)樹使跟蹤隨時(shí)間的變化和調(diào)試或檢查應(yīng)用程序變得更容易。
狀態(tài)是只讀的:更改狀態(tài)的惟一方法是觸發(fā)一個(gè)動(dòng)作。
一個(gè)動(dòng)作是一個(gè)普通的JS對象,用來描述變化。
就像state是數(shù)據(jù)的最小表示一樣,action是數(shù)據(jù)更改的最小表示。
使用純函數(shù)進(jìn)行更改:為了指定如何通過操作轉(zhuǎn)換。
3、Redux的中間件
中間件提供第三方插件的模式,自定義攔截action -> reducer 的過程。變?yōu)?action -> middlewares -> reducer。這種機(jī)制可以讓我們改變數(shù)據(jù)流,實(shí)現(xiàn)如異步 action ,action 過濾,日志輸出,異常報(bào)告等功能。
常見的中間件:
Redux-logger:提供日志輸出
Redux-thunk:處理異步操作
Redux-promise:處理異步操作,actionCreator的返回值是promise
4、Redux有什么缺點(diǎn)?
一個(gè)組件所需要的數(shù)據(jù),必須由父組件傳過來,而不能像flux中直接從store取。
當(dāng)一個(gè)組件相關(guān)數(shù)據(jù)更新時(shí),即使父組件不需要用到這個(gè)組件,父組件還是會(huì)重新render,可能會(huì)有效率影響,或者需要寫復(fù)雜的shouldComponentUpdate進(jìn)行判斷。
5、你如何理解“單一數(shù)據(jù)源”?
Redux使用“Store”將應(yīng)用程序的整個(gè)狀態(tài)存儲(chǔ)在一個(gè)地方。
因此,所有組件的狀態(tài)都存儲(chǔ)在存儲(chǔ)中,它們從存儲(chǔ)本身接收更新。
單狀態(tài)樹使跟蹤隨時(shí)間的變化和調(diào)試或檢查應(yīng)用程序變得更容易。
6、列出Redux的組件
Redux由以下組件組成:
Action—它是一個(gè)描述所發(fā)生事情的對象。
它是一個(gè)決定狀態(tài)如何變化的地方。
存儲(chǔ)—整個(gè)應(yīng)用程序的狀態(tài)/對象樹保存在存儲(chǔ)中。
視圖——簡單地顯示存儲(chǔ)提供的數(shù)據(jù)。
8、如何在Redux中定義操作?
React中的操作必須具有type屬性,該屬性指示正在執(zhí)行的操作的類型。
它們必須被定義為一個(gè)字符串常量,你還可以向它添加更多的屬性。
在Redux中,操作是使用名為Action creator的函數(shù)創(chuàng)建的。
9、解析Reducer的作用
Reducer是純函數(shù),它指定應(yīng)用程序的狀態(tài)如何隨操作的變化而變化。
reduce通過獲取以前的狀態(tài)和動(dòng)作來工作,然后返回一個(gè)新的狀態(tài)。
它根據(jù)操作的類型確定需要執(zhí)行哪種類型的更新,然后返回新值。
如果不需要做任何工作,它將返回以前的狀態(tài)。
10、Store存儲(chǔ)在Redux中的意義是什么?
存儲(chǔ)是一個(gè)JavaScript對象,它可以保存應(yīng)用程序的狀態(tài),并提供一些幫助方法來訪問狀態(tài)、分派操作和注冊偵聽器。
應(yīng)用程序的整個(gè)狀態(tài)/對象樹保存在單個(gè)存儲(chǔ)中。
因此,Redux非常簡單和可預(yù)測。
我們可以將中間件傳遞給存儲(chǔ)來處理數(shù)據(jù),以及保存更改存儲(chǔ)狀態(tài)的各種操作的日志。所有操作都通過reduce返回一個(gè)新的狀態(tài)。
11、Redux的優(yōu)點(diǎn)是什么?
Redux的優(yōu)勢如下:
結(jié)果的可預(yù)測性——因?yàn)榭偸怯幸粋€(gè)真實(shí)的來源,即存儲(chǔ),所以對于如何將當(dāng)前狀態(tài)與操作和應(yīng)用程序的其他部分同步,沒有混淆。
可維護(hù)性——通過可預(yù)測的結(jié)果和嚴(yán)格的結(jié)構(gòu),代碼變得更容易維護(hù)。
服務(wù)器端呈現(xiàn)—只需將在服務(wù)器上創(chuàng)建的存儲(chǔ)傳遞到客戶端。
這對于初始渲染非常有用,并提供了更好的用戶體驗(yàn),因?yàn)樗鼉?yōu)化了應(yīng)用程序的性能。
開發(fā)人員工具——從操作到狀態(tài)更改,開發(fā)人員可以實(shí)時(shí)跟蹤應(yīng)用程序中發(fā)生的所有事情。
社區(qū)和生態(tài)系統(tǒng)——Redux背后有一個(gè)巨大的社區(qū),這使得它更容易使用。
一個(gè)龐大的人才社區(qū)為圖書館的改善和開發(fā)各種應(yīng)用作出了貢獻(xiàn)。
易于測試——Redux的代碼主要是小的、純的和隔離的函數(shù)。
這使得代碼可測試且獨(dú)立。
組織——Redux精確地定義了代碼的組織方式,這使得代碼在團(tuán)隊(duì)使用時(shí)更加一致和簡單。
12、Redux有什么好處?
Maintain ability, 由于代碼風(fēng)格要求比較嚴(yán)格,所以可維護(hù)性比較強(qiáng)。
Organization, 代碼的組織性比較好, 這樣實(shí)際上做工作的時(shí)候相對容易。
Server rendering. 服務(wù)器端創(chuàng)建的store會(huì)轉(zhuǎn)發(fā)到客戶端。
Developer tools. 方便而強(qiáng)大的開發(fā)者工具為調(diào)試和實(shí)時(shí)的開發(fā)提供了便利。
Ease of testing. 小函數(shù),基本上只用來做一件事情,這使得整個(gè)測試變得非常簡單。
13、Redux跟mvc和flux有什么區(qū)別?
先說一下mvc,mvc把整個(gè)應(yīng)用分成數(shù)據(jù)層,表示層和邏輯層。當(dāng)數(shù)據(jù)變化比較多的時(shí)候,系統(tǒng)變得會(huì)比較復(fù)雜,調(diào)試就需要更多的經(jīng)驗(yàn)。再說一下flux。Flux跟Redux比較接近。通過event subscription來管理數(shù)據(jù)的變化。回調(diào)加載機(jī)制跟Redux比較接近。
讀到這里,這篇“Redux面試題及答案有哪些”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。