【问题标题】:Access state property inside mapStateToProps访问 mapStateToProps 中的 state 属性
【发布时间】:2017-03-10 19:55:55
【问题描述】:

我需要访问容器内 redux 状态的特定属性。这些属性将反过来用作获取其他嵌套属性并将它们映射到组件道具的键。我使用不可变的JS。

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

这是一个例子。

状态选择器:

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

userSettings 是一个不可变的 Map, transactions 也是一个 userID 和 transaction list 对的 Map。

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

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

【问题讨论】:

    标签: reactjs redux react-redux


    【解决方案1】:

    很好的问题。是的,这是处理计算道具和生成派生数据的首选方式。这不仅是最好的方法,而且性能也非常好。 Cory House(社区中一位非常优秀的 React 开发人员)在推特上发布了与 a few days ago 类似的内容,他的相同方法适用于 mapStateToProps()。您唯一的其他选择是将计算方法添加到 componentWillReceiveProps() AND componentDidMount()。你可以想象,这会很快变得混乱。

    现在,对你这样做的方式有些保留。

    不要在这里放置异步调用!这也会导致渲染组件出现问题,因为mapStateToProps() 在组件安装之前运行。如果您的组件在挂载之前正在等待承诺,那么您将受到性能影响。这可能是显而易见的。

    说到性能,我个人为包含 8,600 个条目的下拉框生成与此完全相同的派生数据,在用户输入时,对这 8,600 个条目应用模糊过滤器,重新呈现下拉列表,并显示一个新的过滤列表.性能问题为零,组件光滑如黄油。

    【讨论】:

      猜你喜欢
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      相关资源
      最近更新 更多