2016-05-09 32 views
0

在我的应用程序中,我有小动作创建器函数,它为应用程序的一小部分返回一个动作。我的理性存在是,我想用自己的逻辑作为'精确的&',但保持代码的可重用性。Redux - 正确调度行动

举个例子,我有React'tab'组件,它们在任何地方都可以重用。在一种情况下,单击'选项卡'将使选项卡激活,执行其他必需的操作。在其他情况下,单击'选项卡'将使选项卡处于活动状态,然后执行其他操作,可能与上述第一种情况不同。

我想到的逻辑是我会在上面的每个场景中派遣两个动作创建者。第一个显然是常见的,第二个是每个场景都独有的。

// rough code for illustrative purposes 
activateTab :() => { 
dispatch(actionCreator1); 
dispatch(actionCreator2); 
}, 
render:() => { 
<Tab onclick = { activateTab } 
} 

问题(?): 我发生在我每个动作的创造者分派会打电话然后作出反应运行它的“不同”算法减速功能&。即在上面的Tab中,React重新计算了所有DOM更改两次?它是否正确?有人可以确认吗?

这些情况应该如何处理?

我是否应该为每个场景设置独特的动作类型(&从而操作对象)?这意味着,应该只有一个调度功能。

感谢,

回答

1

我应该做的动作类型(&从而操作对象)唯一的每个场景?

大概你已经这样做了,如果你正在调度两个不同的动作是正确的?我认为你不需要SET_TAB动作,如果你从不使用它,你唯一需要的是在减速器中听更多的动作。

在任何情况下,你的假设都是正确的,让一个reducer监听许多不同的动作是完全正常的。考虑你的活动标签减速看起来是这样的:

let initial = { 
    fooActiveTab: 0, // first foo tab is open 
    barActiveTab: 2, // third bar tab is open 
} 

function activeTab (state, action) { 
    switch (action.type) { 

    case 'SOMETHING_RELEVANT_TO_FOO': 
    case 'FOO_AJAX_SUCCESS': 
     return { 
     ...state, 
     fooActiveTab: action.payload // set current tab 
     } 

    default: 
     return state 

    } 
} 

这使你的减速机组成很清楚,作为标签的状态听各种各样的事情,可能会改变活动的标签是什么。这样你就不需要在每个函数调用中分派两个动作。只要你发送你想要激活的标签的id,就足够了。

我想你应该做到上述,但不是为了防止React运行差异算法..但要更有条理。 React的diff/patch会运行A LOT,你的应用程序仍然会非常快。您感觉到的任何缓慢都是由于组件实际更新,因为DOM需要更改,而不是因为reconciliation

+0

谢谢Azium。我认为应该创造出独特的“动作类型”,然而,在减速器中,“开关 - >案例”应该集中于返回一些小变化。毕竟,所有减速器都会被要求采取一切行动。再次感谢。 – Kayote

相关问题