2016-11-13 123 views
4

当使用Redux时,商店应该是真实的唯一来源,并且没有冗余。假设商店的一部分代表了有名字和年龄的人。在传统的面向对象编程的人类可能是这个样子:哪里处理Redux的计算属性?

class Person { 
    constructor(first, last, birthday) { 
     this.first = first; 
     this.last = last; 
     this.birthday = birthday; 
    get_fullname() { // ... //} 
    get_age() { // ... //} 
} 

然而,方法不允许在终极版存储对象。那么,这些“方法”应该在哪里实施呢?

回答

2

有两种方式:

  1. 在减速。

    不知道你在哪里得到'商店无冗余'规则。将计算结果与商店中的源数据一起保存是完全有效的(虽然在连接名称和姓氏这种简单情况下可能不是最佳方法)

  2. 在选择器中。

    选择器是用于从存储中获取特定子分支的函数。他们也可以在返回之前对它们进行计算。 See this chapter in redux' documentation for some examples

    这个,在需要的地方有一些备忘录,我想是两个更好的解决方案。

3

你可以计算这种点播状态里面你connect功能与选择

function getFullName(state) { 
    return `${state.first} ${state.last}`; 
} 

function mapStateToProps(state) { 
    return { 
    fullName: getFullName(state) 
    }; 
} 

connect(mapStateToProps)(MyComponent); 

退房Reselect,被设计为与终极版很好地工作选择库。

技术上没有规则说你不能在你的reducer中处理它,然后将预先计算好的状态存储在你的商店中,但是你必须记住每次依赖属性改变时更新它。

一般你,如果你保持冗余数据你的商店,并使用选择器允许你写,你的组件之间共享按需计算,当你需要他们用简单的代码结束。