91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redux 中 combineReducers實現原理

發布時間:2020-04-22 21:53:01 來源:網絡 閱讀:620 作者:sendoffice 欄目:web開發

使用一個reducer

    const initialState =
    {
        id          : 2,
        name    : 'myName', 
    }
    import { createStore } from 'redux';
    const reducer = function(state=initialState, action) {
                    //...        
        return state;
    }
    const store = createStore(reducer);

這種情況下,這個reducer函數會對所有的action進行判斷和處理,傳入的state參數是整個store中的狀態的全集。可能是這樣:

    {
                id          : 2,
                name    : 'myName', 
    }

使用combineReducers 復合多個reducer

    const user = (state = [], action) => {
        switch (action.type) {
            case 'RENAME':
                //...
            default:
                return state;
        }
    }

const product = (state = [], action) => {
        switch (action.type) {
            case 'SOLD':
                //...
            default:
                return state;
        }
    }

const reducers = combineReducers({
    user,
    product,
});

const store = createStore(reducers);

這種情況下,每個reducer會對相關的action進行處理,返回與之相關的狀態。(而實際實現是,combineReducers將所有reducer合并成立一個大的reducer)。

整個store的狀態全集會是如下樣子:

{
        user: {
            id: 0,
            name: 'myNmae',
        },
        product: {
                id: 0,
                is_sold: 0,
        }
}

可以看出這是一個樹形結構,每個reducer所處理的數據在自己的分支結構中。因此,每個reducer可以獨立的編寫,無需關注其他reducer的數據(state)處理方式。同樣,dispatch的時候只要發送與之相關的內容即可。
譬如,寫一個“我”的reducer:

        const initialState =
        {
            name                 : null,
            displayName     : null,
        };

        const me = (state = initialState, action) =>
        {
            switch (action.type)
            {
                case 'SET_ME':
                {
                    const { name, displayName } = action.payload;
                    return { name, displayName };
                }
                default:
                    return state;
            }
        };

//想要設置“我”的屬性,只要:
store.dispatch({
    type    : 'SET_ME',
    payload : { "jacky", "小王"}
});

但是,事實上每個dispatch發出之后,所有reducer都會被調用一遍(只是大部分事不關己,直接返回自己的state),最終會返回一個完整的狀態樹,就像上面看到的樣子。

編碼建議

對于復雜的應用,可以編寫多個reducer,每個reducer專注處理一類state。
可以將多個reducer的實現放到一個文件里實現,也可以每個reducer使用一個單獨的文件(便于分工)。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

西乌| 绥化市| 河间市| 铜川市| 淳化县| 金乡县| 白朗县| 界首市| 体育| 潮州市| 新绛县| 贺兰县| 醴陵市| 密云县| 德庆县| 本溪| 泰宁县| 永德县| 方山县| 乌审旗| 进贤县| 桃源县| 凤冈县| 德昌县| 镇康县| 巩留县| 尚义县| 宝坻区| 武强县| 镇宁| 永德县| 湖北省| 上栗县| 东乡| 平塘县| 团风县| 靖安县| 吴旗县| 岳西县| 张掖市| 海宁市|