访问mapStateToProps中的state属性

时间:2017-03-10 19:55:55

标签: reactjs redux react-redux

我需要在容器中访问redux状态的特定属性。这些属性又将用作获取其他嵌套属性并将其映射到组件道具的键。我使用immutableJS。

在mapStateToProps中执行此操作的最佳方法是什么?这会导致任何性能开销还是没关系,因为mapStateToProps已经将整个状态作为参数接收了?

这是一个例子。

州选择者:

export const userSettingsState = state => state.get('userSettings');
export const transactionsState= state => state.get('transactions');

userSettings是一个不可变的Map,而transaction也是一个userID和事务列表对的Map。

const mapStateToProps = (state) => {
  const curUID = userSettingsState(state).get('currentUserID');
  return {
    trList: transactionsState(state).getIn([curUID, 'trList'])
  };
};

我需要currentUID来访问用户事务。上面的示例工作正常。但这是最好的方式吗?

1 个答案:

答案 0 :(得分:1)

好问题。是的,这是处理计算出道具和生成派生数据的首选方法。这不仅是最好的方式,而且性能也非常好。 Cory House(一个非常好的React dev在社区中广为人知)在Twitter上发布了类似于a few days ago的内容,他的同样的方法适用于mapStateToProps()。您唯一的选择是向componentWillReceiveProps()componentDidMount()添加计算方法。你可以想象这很快乱。

现在,对你做这件事的方式有所保留。

不要把异步电话放在这里!这也会导致在组件安装之前运行组件mapStateToProps()时出现问题。如果您的组件在安装之前等待承诺,那么您将获得性能提升。这可能是显而易见的。

说到性能,我亲自为这样的下拉框生成派生数据,其中有8,600个条目在用户输入上,对这些8,600个条目应用模糊过滤器,重新呈现下拉列表,并显示新的过滤列表。没有任何性能问题,而且组件也很顺利。