redux 與 react-redux 直接壹起使用, 讓我總分不清楚這兩個各自的職責,分別整理壹下。
reudx
對於redux 整個過程如上所示。
1. 用戶在UI組件中通過 store.dispatch觸發action ;
2. store 自動調用reducer,並傳入之前的state,以及1中用戶的action, 經過reducer返回新的state;
3. store.subscribe(listener) 訂閱state的變化,可通過setState更新react UI。
redux 整個設計是: 所有妳“寫”的邏輯都集中在壹個單獨的函數(reducer)中,並且執行這些邏輯的唯壹方式就是傳給 Redux 壹個能夠描述當時情景的普通對象(action)。Redux store 調用這些邏輯函數,並傳入當前的 state tree 以及這些描述對象,返回新的 state tree,接著 Redux store 便開始通知這些訂閱者(subscriber)state tree 已經改變了。
因此要求 reducer 是純函數和可預測,不能突變。
react-redux
react-redux 主要是redux執行的第3步(標紅部分)。
使用mapStateToProps訂閱 Store,每當state更新的時候,就會自動執行,重新計算 UI 組件的參數,從而觸發 UI 組件的重新渲染。 mapStateToProps 是輸入邏輯(將state輸入到react的UI中);
mapDispatchToProps定義了哪些用戶的操作應該當作 Action,傳給 Store。 mapDispatchToProps是輸出邏輯(將用戶的操作變成action,從react的UI中發出)。
容器組件 = connect(mapStateToProps,mapDispatchToProps)(UI 組件);
mapStateToProps 中使用的state ,來自於provider組件中註入的store。其實現是react 的context屬性。
資料: