Redux-修改reducer的逻辑和动作


这些天之一,我在修补很多redux'a文件,从逻辑上讲,这些文件被移至reducer,actions,action的类型常量。 事实证明,所有这一切都是一项艰巨的任务,将所有这些类型的文件保存在脑海中并追踪逻辑。 还有...尤里卡(Eureka),提出了简化redux逻辑编写的想法。 也许是创建您的自行车,但是谁没有尝试写自行车呢? 但是最主要的不是写作,而是何时写作支持。 让我尝试向您展示我对Redux逻辑的看法。


开始


因此,我们减少了:


//   import { TODO } from './actions/const'; ..... //      .... //    reducer function todoApp(state = initialState, action) { switch (action.type) { case TODO.SET_VISIBILITY_FILTER: return Object.assign({}, state, { visibilityFilter: action.filter }) case TODO.ADD_TODO: return Object.assign({}, state, { todos: [ ...state.todos, { text: action.text, completed: false } ] }) case TODO.TOGGLE_TODO: return Object.assign({}, state, { todos: state.todos.map((todo, index) => { if (index === action.index) { return Object.assign({}, todo, { completed: !todo.completed }) } return todo }) }) ...          ...            ... default: return state } } 

取自redux上的码头


动作看起来像:


 //   import { TODO } from './const'; export const addTodo = (value) => ({ type: TODO.ADD_TODO, payload: value }) 

我认为没有必要显示常数。


布尔


我将尝试描述我在阅读代码时遇到的疯狂,尤其是在调试或扩展功能时。


  • 搜索-始终需要按Ctrl + F和全局Ctrl + Shift + F
  • 从腿长的地方看不到。 它来自上面的段落。
  • 不,这只是一点点,所以我的整个项目仍然被常量刺穿。 不,我不是反对常量,但是为什么呢? 此外,如果像示例中那样将它们与嵌套一起使用,并且如果将它们与多个嵌套在一起,那么通常这将是一团糟。
  • 逻辑是模糊的。 在一个动作中,另一个动作中,只有这两个常数才需要在第三个(可选)常量中处理这些动作。
  • 开发或调试时,我需要保持许多文件打开状态。 它来自上面的段落。
    好吧等等

逻辑输入


乍一看,也许看起来很奇怪,令人震惊,但在我看来,这就是应有的地位。 我将尝试传达我的模板。


减速器


在Google上发现


齿轮-改变扭矩和动力的机构。 这是一个或多个互相作用的齿轮,它们将发动机转数减小到执行节点可接受的转速。

即,其上的轴具有齿轮,该齿轮将旋转传递至另一个齿轮,该齿轮又旋转至其轴。 我们卸下轴,并随之卸下齿轮。 可以说,这不是一个不连续的模块。


如果进一步进行寓言,则轴是动作,齿轮是逻辑。 由此可见,变速箱在确保扭矩(即应用中的数据)的传输方面起着这样的作用。 它应该支持理想的机制工作环境。


行动


如上所述,这是动作本身,以及要传输的能量(在我们的情况下为数据)的逻辑。


因此,让我们开始吧。 我的自行车


减速器:


 export function todoApp(state = initialState, action) { if (typeof action.func === 'function') { return action.func(state); } } 

是的,这就是我所有的减速器。 现在也许模式之间会有一个小差距,怎么办? 我们从reducer'a ..中删除了逻辑。 是的 我告诉你,我们从reducer'a中删除了逻辑!


让我们看一下动作:


 export function addTodo = (value) => ({ type: 'ADD_TODO' , payload: value, func: (state) =>({...state, value}) }) } 

因此,我们提出了负责将数据传输到存储的逻辑。 保留减速器以确保整个机构的运行。 而且他应该做好事,不要被与他无关的事情分散注意力。 而且,我们只能观察腿部成长的顺序,必要时可以快速找到并固定或补充。


值得注意的是,我们删除了常量。 是的,也切换。 这可以减少化简器中O(1)执行的复杂性。


这只是一个示例草图,您可以扩展和删除CombineReducers。 扩展,补充,更改您的需求非常好,可以使用一种工具,使其非常适合您的任务。


最重要的是我想说。



要聪明。 蜜蜂

Source: https://habr.com/ru/post/zh-CN440940/


All Articles