1. 程式人生 > >簡談自己對redux的理解

簡談自己對redux的理解

redux描述         首先redux 有3大組成部分 1.store2. action .3reducer  還有邊外的 components, 如何觸發action 呢?首先的拿到store物件,store物件是通過 redux中的createStore()建立的,他有兩個引數,第一個是reducer, 第二個是一個可以裝在處理非同步的applyMiddleware()  applyMiddleware 也是從redux 中匯入, 它裡面的引數是個redux-thunk ,當我們建立了這個 store物件, 在元件中 做dispatch 去派發一個action 他包含了兩個重要的資料一個是 action的型別 一個是payload 這個action一旦派發,註冊在store裡面的reducer 會自動執行 所以我們在建立store的時候要建立一個reducer ,reducer是什麼呢? 他就是一個純函式,它用來返回一個新的狀態,那麼他什麼時候執行呢 ,這是就需要action 告訴他 通過那個action.type, 最重要的是reducer必須返回一個最新的狀態 這時我們就引入了immutable 然後通過subscribe函式做個訂閱 這時我們才知道這個state已經更新了 但是我們做專案時一般和react-redux聯合使用 通過 react-redux 中的 provider 將store總分支注入根元件,其原理就是所謂的context原始碼如下
export function createProvider(storeKey = '
store', subKey) { ...... class Provider extends Component { getChildContext() { return { [storeKey]: this[storeKey], [subscriptionKey]: null } } constructor(props, context) { super(props, context) this[storeKey] = props.store; } render() { return
Children.only(this.props.children) } } }

 

,然後通過react-redux的connect使其元件可以訪問到store 因為redux和react沒有直接的關係 不像vue和vuex那樣基情滿滿,connect有四個引數分別是 connect([mapStateToProps], [mapDispatchToProps], [mergeProps], [options]) 第一個引數:允許我們把store中的資料作為props繫結到元件上,只要store更新了就會呼叫這個方法。例子如下
const
mapStateToProps = (state) => { return ({ count: state.counter.count }) }
第二個引數:允許我們將action作為props繫結到元件中,例子如下
const mapDispatchToProps=(dispatch)=>{
        return {
            xx(xinxi){
            dispatch({type:'join',xinxi})
            }
        }
    }

export default connect(mapStateToProps, mapDispatchToProps)(yourComponent)
後兩個引數基本上也做專案的時候也沒接觸過  想了解可以參考api文件