通常情況下,action只是乙個物件,不能包含非同步操作,這導致了很多建立action的邏輯只能寫在元件中,**量較多也不便於復用,同時對該部分**測試的時候也比較困難,元件的業務邏輯也不清晰,使用中介軟體了之後,可以通過actioncreator非同步編寫action,這樣**就會拆分到actioncreator中,可維護性大大提高,可以方便於測試、復用,同時actioncreator還整合了非同步操作中不同的action派發機制,減少編碼過程中的**量。
通過redux-thunk | redux-promise | redux-sega等中介軟體解決希望在redux中執行非同步操作的需求
redux-thunk的使用
1.安裝redux-thunk中介軟體
yarn add redux-thunk
2. 在redux的store/index.js進行設定
import reducer from "./reducer"
import thunk from "redux-thunk"
export default store
3. 在actioncreators中進行設定
redux-thunk的原理:
建立action —> 中介軟體 —> 派發給reducer處理,action到reducer中間會經歷中介軟體,我們可以在中介軟體中對資料進行操作
actioncreator如果返回的是物件,內部就會呼叫next(),自動的呼叫dispatch派發給下乙個中介軟體 | render 來處理
actioncreator如果返回的是乙個函式,在函式內部做非同步操作–> 引數是dispatch扔給你的,讓你在進行非同步操作的合適時機進行手動派發
import
from
"./actiontype"
export
default
}return action
},add())
},2000)}
}
redux-thunk原理
可以看出來redux-thunk最重要的思想,就是可以接受乙個返回函式的action creator。如果這個action creator 返回的是乙個函式,就執行它,如果不是,就按照原來的next(action)執行。
正因為這個action creator可以返回乙個函式,那麼就可以在這個函式中執行一些非同步的操作。換言之,redux的中介軟體都是對store.dispatch()的增強
dispatch乙個action之後,到達reducer之前,進行一些額外的操作,就需要用到middleware。你可以利用 redux middleware 來進行日誌記錄、建立崩潰報告、呼叫非同步介面或者路由等等。
在學習高階元件之前,先回憶一下高階函式:高階函式就是乙個函式內部返回乙個新的函式,函式內部採用閉包的寫法。
let add = x =>
}// 呼叫
add(12)(2)
而高階元件也是如此
高階元件本質上也是乙個高階函式,內部可以接收乙個元件,然後返回新的元件
例如: react-redux提供的connect()(元件)就是高階元件,react.memo(函式式元件)也是高階元件
元件型別的劃分:
函式式元件(無狀態元件)
不能定義狀態,沒有鉤子函式,使用hook起到鉤子函式的作用
類元件可以定義狀態,有鉤子函式,
對於表單元素,還有受控元件和非受控元件的劃分
高階元件hoc :
connect()() react.memo(函式式元件)
封裝乙個具有版權資訊的高階元件,內部接收乙個元件,並最終返回乙個新的元件由於元件呼叫需要經過高階元件,狀態傳遞也要經由高階元件
高階元件withcomp.js
import react,
from
'react'
const
withcopy
= comp =>
/>
//高階元件將屬性傳遞給元件www
©:葫蘆娃
<
/div>)}
}}export
default withcopy
需要呼叫高階元件的普通元件
import react,
from
'react'
import withcopy from
"./withcomp"
class
wwwextends
component
<
/div>)}
}export
default
withcopy
(www)
import react,
from
'react'
import
wwwfrom
"./components/www"
export
default
class
extends
component
render()
/>
<
/div>)}
}
13 2 7 中介軟體
中介軟體顧名思義,是介於request與response處理之間的一道處理過程,相對比較輕量級,並且在全域性上改變django的輸入與輸出。因為改變的是全域性,所以需要謹慎實用,用不好會影響到效能。如果你想修改請求,例如被傳送到view中的httprequest物件。或者你想修改view返回的htt...
21 中介軟體
一 中介軟體的定義 1.中介軟體是django請求 響應處理的鉤子框架,它是乙個輕量級的 低階的 外掛程式 系統,用於全域性改變django的輸入或輸出 2.中介軟體以類的形式體現 3.每個中介軟體元件負責做一些特定的功能,例如django包含乙個中介軟體元件 authenticationmiddl...
07 中介軟體
5 獲取的資料會交給最後乙個中介軟體的process response方法處理,然後依次向前面的中介軟體process response 6 在任一中介軟體的process request和process view方法中有返回值就會直接返回給process response 3 檢視函式 4 中介軟...