2017-08-25 81 views
0

我们如何处理财产状态变化影响另一财产状态的情况?处理影响另一个财产状态的财产

下面是可能有助于阐明我试图解决的问题的实际情况。

我有一个通用的日期选择器组件,可以作为一个完全独立的组件使用,也可以“链接”到日期选择器的另一个实例。

我每次需要用户设置两个日期时,都会使用这种“链接”方法,例如开始和结束日期。这个想法是,当用户设置开始日期时,我想禁用用户刚刚在第二个日期选择器中设置的开始日期之前的所有日期。这样,用户不会意外设置开始日期之前的结束日期。

每个日期选择器都是我的reducer中的一个对象,具有一些属性。所以它看起来是这样的:

datePickers: { 
    "startDatePicker": { 
     activeDate: "8/24/2017", 
     disableBefore: "", 
     disableAfter: "" 
    }, 
    "endDatePicker": { 
     activeDate: "8/25/2017", 
     disableBefore: "8/24/2017", // Notice that the disableBefore is set to the active date in startDatePicker 
     disableAfter: "" 
    } 
} 

中的对象设置属性的值是很容易的,但我遇到了一个有趣的问题。

正如我所说的,我的日期选择器可以用作单个和独立的日期选择器,在这种情况下,我们不会设置另一个日期选择器实例的禁用日期。

问题是,无论何时我使用“链接”实例并尝试设置第二个日期选择器的禁用日期,用于设置日期的操作在带有未链接日期选择器的减速器中创建问题。由于所有减法器都对同一动作作出响应,因此具有日期选取器的独立实例的减速器仍会响应该动作并尝试设置不存在的日期选取器的禁用日期。

我的一个想法是在减速器中使用一个条件,但我确实觉得这是一个坏主意。这是我问这个问题的地方,我同意答案。 Conditions in reducers

回答

1

我相信你有一些方法来唯一标识商店里的日期选择器。

我会做的是有更新日期选择器的动作也有一个字段,标识这个链接到其他日期选择器。

这样我就可以从我的动作创建者(我正在考虑Redux Observable,但我相信它也可以用Redux Thunk)分派两个动作:一个更新此日期选择器,另一个更新链接的日期选择器。

这只会让商店更新datepicker的任务,而不用担心逻辑。

+0

我想出了一个想法,但我更喜欢你的想法。我正在考虑颠倒逻辑 - 就像在依赖倒置一样。我将禁用日期存储在第一个日期选择器中,并让第二个日期从第一个日期选择器读取其数据。我对我的方法并不满意的是,我将第二个日期选择器中的数据保留在第一个不太直观的数据中。你的更直接。谢谢! – Sam

+0

我想我跳过这个枪。我不明白这是如何解决我的问题的。我已经有办法控制何时致电我的动作创建者设置禁用日期。问题发生在我合法地调用SET_DISABLED_DATES时,所有的缩减器都响应,但并不是所有的都有指定的datePicker。我在这里看到的唯一解决方案是在执行'Object.assign()'之前有一个条件来确保指定的日期选择器已被定义。这里有一个新问题,我发布了更多的细节:https://stackoverflow.com/questions/45889793/reducer-behavior – Sam