redux是一種對項目進行統一的狀態管理機制,父子組件間通訊是經過props屬性值傳遞和子組件回調父組件提早聲明好的方法,整個state只能從上到下,而沒有回溯的能力,redux將全部的state集中到全部組件頂層,而後分發給每一個組件本身須要的state,更好的管理狀態,頂層分發狀態,讓React組件被動地渲染,而react hooks解決的是pure render function (渲染函數組件)擁有狀態和生命週期
單一數據源 store 由rootReducer組成,用於最外層組件javascript
import { createStore } from 'redux'; import { Provider } from 'react-redux'; const store = creacteStore(rootReducer); <Provider store={store}><App /></Provider>
rootReducer由多個reducers組成java
import { combineReducers } from 'redux'; export default combineReducers({reducerA, reducerB})
每個reducer由 oldState(initState) 和 action組成,經過action.type 返回 newState,default 返回oldStatereact
export default function count (state = 0, action) { switch(action.type) { case 'count': return state + 1 default: return state } }
action 能夠是一個方法,用於返回對象,也能夠直接是一個對象,type屬性是必須的git
export function count () { return { type: 'count' } }
connect 用於鏈接組件和數據github
import { connect } from 'react-redux' export default connect(mapStateToProps, mapDispatchToProps)(App)
mapStateToProps 方法用於將狀態映射成屬性,返回組件須要的屬性redux
const mapStateToProps = (state) => { return { count: state.count } }
mapDispatchToProps 提供給組件一個屬性用於觸發dispatch,也就是用戶觸發action數組
const mapDispatchToProps = (dispatch) => { return { addCount: () => dispath(someAction) // dispatch的對象是action } }
state = store.getState() // 獲取state
state.count = state.count + 1 // state是隻讀的,只能經過dispatch(action)改變
我寫了一個完整的簡單的 react-redux-count-demo 項目,也是上面演示的列子
參考 Redux 簡明教程和 理解 React,但不理解 Redux,該如何通俗易懂的理解 Redux? - Wang Namelos的回答 - 知乎