網站首頁 編程語言 正文
路由中使用redux
在路由中使用redux只需要兩步:
- 第一步 在路由策略組件中(如HashRouter),渲染Route組件,并在該Route路由規則組件中,引入connect方法處理后的應用程序組件
- 第二步 在Provider組件中,渲染路由策略組件(如HashRouter)。
注意:路由規則渲染組件的時候,路由規則組件只負責向組件傳遞路由相關的數據,其他的數據(如store數據)是不會傳遞的
所以Route渲染的組件,想接收store中的數據,我們只能采用第二種方式,渲染處理后的組件。
路由reducer
路由也提供了reducer方法,我們需要引入react-router-redux
提供了routerReducer,表示路由的reducer
我們也想添加到應用中,我們就要使用combineReducers方法添加多個reducer
參數是對象:
key表示state名稱(命名空間)
value表示reducer
相當于vuex中的module切割模塊
此時合并后,在組件中,訪問state數據,要攜帶命名空間
// 拓展組件
let DealApp = dealFn(App);
let DealHome = dealFn(Home);
let DealList = dealFn(List);
let DealDetail = dealFn(Detail);
// 第二步 確定渲染方式
let routes = (
<HashRouter>
{/*<App></App>*/}
{/* 1 通過路由規則,渲染處理后的應用程序 */}
<Route path="/" component={DealApp}></Route>
</HashRouter>
)
// 2 在provider中,渲染路由規則
render(<Provider store={store}>{routes}</Provider>, app)
Redux拓展
state拓展
我們目前操作的state都是一個值類型的數據
因此我們可以直接操作這個state數據
如果state是一個引用類型的數據,我們就不能在state上直接操作了
我們要先定義新對象,在新對象上操作數據,最終與原來的state合并成新對象,并返回這個新對象作為新的state數據
我們可以通過ES6提供的Object.assign方法來合并對象,
由于后面的數據會覆蓋前面的數據,因此我們將新對象放在state對象之后。
action拓展
action是一個通信的對象,里面攜帶消息數據
靜態action
我們目前定義的action對象都是一個靜態的action對象,
也就是說action中的數據是固定的
適用性會收到限制。為了提高適用性,我們可以定義動態action
動態action
動態action是一個函數,可以接收參數,我們根據參數的不同,返回不同的action,這樣就增強了action對象的適用性了
異步action
到目前為止,我們所發送的action都是同步的,因為在action中沒有異步的操作
異步action適用場景:
react是一個視圖層的框架,但是我們有時候將請求放在組件中,就會讓組件做了太多數據業務邏輯方面的事情了,有時候我們想將這部分請求放在action實現,此時這個action就是一個異步的action
異步action與同步action相比:
- 同步action(例如動態action),是一個函數,返回值是一個對象(就是發布的aciton對象)
- 異步aciton,是一個函數,返回值是一個函數
- 返回值函數中,參數是dispatch
- 我們可以在返回值函數中,實現異步操作,并在操作完成的時候,通過參數dispatch發布同步的action消息。
- redux默認不支持異步,想使用異步action就要安裝中間件
異步action中間件
redux-thunk是異步action中間件
我們可以通過applyMiddleware方法,將其安裝在redux中,
該方法參數就是中間件,返回一個新的方法,用來拓展createState方法,會得到一個新的創建store方法,此時我們用這個新的方法創建store,新的store就具有了異步aciton的功能。
原文鏈接:https://blog.51cto.com/u_13349380/5624458
相關推薦
- 2022-10-25 React?中?setState?的異步操作案例詳解_React
- 2022-04-12 Redis?Server啟動過程的詳細步驟_Redis
- 2022-12-13 Flutter?阻止系統鍵盤彈出的優雅方式_Android
- 2022-05-09 輕量級ORM框架Dapper應用之實現DTO_實用技巧
- 2022-09-14 python?服務器批處理得到PSSM矩陣的問題_python
- 2022-06-04 Linux下使用Jenkins自動化構建.NET?Core應用_基礎應用
- 2022-05-03 C#面向對象設計原則之組合/聚合復用原則_C#教程
- 2022-07-21 StreamX 部署 Flink Stream 應用
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支