亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

減少樣板代碼在redux中關(guān)于 reduce重構(gòu)的應(yīng)用

FWHeart / 601人閱讀

摘要:原始代碼省略了內(nèi)容從技術(shù)上將,我們甚至不關(guān)心之前的狀態(tài)使用樣板代碼后不在需要語(yǔ)句,有些代碼潔癖很討厭使用和的條件判斷,使用樣板代碼后可以使得代碼可以配置省略了內(nèi)容省略了內(nèi)容省略了內(nèi)容

原始代碼

// 省略了內(nèi)容
function updateObject(oldObject, newValues) {}
function updateItemInArray(array, itemId, updateItemCallback) {}



function setVisibilityFilter(visibilityState, action) {
    // 從技術(shù)上將,我們甚至不關(guān)心之前的狀態(tài)
    return action.filter;
}

function visibilityReducer(visibilityState = "SHOW_ALL", action) {
    switch(action.type) {
        case "SET_VISIBILITY_FILTER" : return setVisibilityFilter(visibilityState, action);
        default : return visibilityState;
    }
};


function addTodo(todosState, action) {
    const newTodos = todosState.concat({
        id: action.id,
        text: action.text,
        completed: false
    });

    return newTodos;
}

function toggleTodo(todosState, action) {
    const newTodos = updateItemInArray(todosState, action.id, todo => {
        return updateObject(todo, {completed : !todo.completed});
    });

    return newTodos;
}

function editTodo(todosState, action) {
    const newTodos = updateItemInArray(todosState, action.id, todo => {
        return updateObject(todo, {text : action.text});
    });

    return newTodos;
}

function todosReducer(todosState = [], action) {
    switch(action.type) {
        case "ADD_TODO" : return addTodo(todosState, action);
        case "TOGGLE_TODO" : return toggleTodo(todosState, action);
        case "EDIT_TODO" : return editTodo(todosState, action);
        default : return todosState;
    }
}

function appReducer(state = initialState, action) {
    return {
        todos : todosReducer(state.todos, action),
        visibilityFilter : visibilityReducer(state.visibilityFilter, action)
    };
}

使用樣板代碼后不在需要switch語(yǔ)句,有些代碼潔癖很討厭使用if和switch的條件判斷,使用樣板代碼后可以使得代碼可以配置

// 省略了內(nèi)容
function updateObject(oldObject, newValues) {}
function updateItemInArray(array, itemId, updateItemCallback) {}

function createReducer(initialState, handlers) {
  return function reducer(state = initialState, action) {
    if (handlers.hasOwnProperty(action.type)) {
      return handlers[action.type](state, action)
    } else {
      return state
    }
  }
}


// 省略了內(nèi)容
function setVisibilityFilter(visibilityState, action) {}

const visibilityReducer = createReducer("SHOW_ALL", {
    "SET_VISIBILITY_FILTER" : setVisibilityFilter
});

// 省略了內(nèi)容
function addTodo(todosState, action) {}
function toggleTodo(todosState, action) {}
function editTodo(todosState, action) {}

const todosReducer = createReducer([], {
    "ADD_TODO" : addTodo,
    "TOGGLE_TODO" : toggleTodo,
    "EDIT_TODO" : editTodo
});

function appReducer(state = initialState, action) {
    return {
        todos : todosReducer(state.todos, action),
        visibilityFilter : visibilityReducer(state.visibilityFilter, action)
    };
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/102891.html

相關(guān)文章

  • Redux 問(wèn)題:React、MobX 和 Realm 能解決嗎?

    摘要:它是由一個(gè)非常聰明的人開(kāi)發(fā)的,用來(lái)緩解在單頁(yè)面應(yīng)用中管理狀態(tài)的問(wèn)題。的問(wèn)題沒(méi)有一種適合所有場(chǎng)景的完美工具。為設(shè)計(jì)的是世界的另一個(gè)新增內(nèi)容,但目前僅適用于。這將導(dǎo)致最后期限延長(zhǎng),并且留下更多需要我們維護(hù)的代碼。 原文:The Problems with Redux: Can React, MobX, and Realm save us? 作者:Erich Reich 首先,我不討厭 ...

    snifes 評(píng)論0 收藏0
  • 【譯】Redux 還是 Mobx,讓我來(lái)解決你困惑!

    摘要:我現(xiàn)在寫(xiě)的這些是為了解決和這兩個(gè)狀態(tài)管理庫(kù)之間的困惑。這甚至是危險(xiǎn)的,因?yàn)檫@部分人將無(wú)法體驗(yàn)和這些庫(kù)所要解決的問(wèn)題。這肯定是要第一時(shí)間解決的問(wèn)題。函數(shù)式編程是不斷上升的范式,但對(duì)于大部分開(kāi)發(fā)者來(lái)說(shuō)是新奇的。規(guī)模持續(xù)增長(zhǎng)的應(yīng) 原文地址:Redux or MobX: An attempt to dissolve the Confusion 原文作者:rwieruch 我在去年大量的使用...

    txgcwm 評(píng)論0 收藏0
  • 我是如何一步步“改造”redux

    摘要:但是在使用開(kāi)發(fā)的過(guò)程中還是感覺(jué)不太順手,本文將闡述我是如何對(duì)進(jìn)行一步步改造以適應(yīng)個(gè)人和團(tuán)隊(duì)開(kāi)發(fā)需求的。所以說(shuō),我們?nèi)绾卧诒WC的設(shè)計(jì)原則以及項(xiàng)目規(guī)范性上,對(duì)其進(jìn)行簡(jiǎn)化改造,是我這里需要解決的問(wèn)題。 從Vue換到React+Redux進(jìn)行開(kāi)發(fā)已經(jīng)有半年多的時(shí)間,總的來(lái)說(shuō)體驗(yàn)是很好的,對(duì)于各種邏輯和業(yè)務(wù)組件的抽象實(shí)在是方便的不行,高階組件,洋蔥模型等等給我?guī)?lái)了很多編程思想上的提升。但是在使...

    jemygraw 評(píng)論0 收藏0
  • Rematch: Redux 重新設(shè)計(jì)

    摘要:沿著管道有兩組偵聽(tīng)器中間件和訂閱。中間件是可以偵聽(tīng)傳入的動(dòng)作的函數(shù),支持諸如,或偵聽(tīng)器之類(lèi)的工具。將視為一個(gè)帶有更新前更新后鉤子的全局對(duì)象,以及能夠以簡(jiǎn)單的方式合成新?tīng)顟B(tài)。應(yīng)將兩者視為一體,并且不再需要文件導(dǎo)出類(lèi)型的字符串。 難道現(xiàn)在狀態(tài)管理不是一個(gè)可以解決的問(wèn)題嗎?直觀地說(shuō),開(kāi)發(fā)人員似乎知道一個(gè)隱藏的事實(shí):狀態(tài)管理的使用似乎比需要的更困難。在本文中,我們將探討一些你可能一直在問(wèn)自己的...

    Taste 評(píng)論0 收藏0
  • React 新 Context API 前端狀態(tài)管理實(shí)踐

    摘要:本文轉(zhuǎn)載至今日頭條技術(shù)博客眾所周知,的單向數(shù)據(jù)流模式導(dǎo)致?tīng)顟B(tài)只能一級(jí)一級(jí)的由父組件傳遞到子組件,在大中型應(yīng)用中較為繁瑣不好管理,通常我們需要使用來(lái)幫助我們進(jìn)行管理,然而隨著的發(fā)布,新成為了新的選擇。 本文轉(zhuǎn)載至:今日頭條技術(shù)博客showImg(https://segmentfault.com/img/bVbiNJO?w=900&h=383);眾所周知,React的單向數(shù)據(jù)流模式導(dǎo)致?tīng)顟B(tài)...

    wing324 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<