2017-03-10 120 views
3

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

是在mapStateToProps内部执行此操作的最佳方法吗?这是否会导致任何性能开销或是否正常,因为mapStateToProps已经接收整个状态作为参数?

下面是一个例子。

状态选择:

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

userSettings是不可变的地图和交易也是一个Map,用户ID和事务列表对。

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

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

回答

1

伟大的问题。是的,这是处理计算道具并生成派生数据的首选方式。这不仅是最好的方式,也是非常高效的。 Cory House(一个在社区中很出名的React开发者)推文与a few days ago类似,他的相同方法适用于mapStateToProps()。您唯一的选择是将计算方法添加到componentWillReceiveProps()componentDidMount()。你可以想象得到这个杂乱无章的速度。

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

不要把异步调用放在这里!这也会导致渲染组件出现问题,因为mapStateToProps()在组件安装之前运行。如果您的组件在安装之前正在等待承诺,您将获得性能点击。这可能很明显。

说到性能,我个人生成的派生数据就是这样一个下拉框,其中包含用户输入的8,600个条目,对这8,600个条目应用模糊过滤器,重新呈现下拉列表并显示新的过滤条件名单。零性能问题并没有像黄油那样顺畅。