在 mapStateToProps 中访问状态 属性
Access state property inside mapStateToProps
我需要访问容器内 redux 状态的特定属性。这些属性将依次用作获取其他嵌套属性并将它们映射到组件属性的键。我使用 immutableJS。
在 mapStateToProps 中执行此操作的最佳方法是什么?这会导致任何性能开销吗?还是可以吗,因为 mapStateToProps 已经接收了整个状态作为参数?
这是一个例子。
状态选择器:
export const userSettingsState = state => state.get('userSettings');
export const transactionsState= state => state.get('transactions');
userSettings 是一个不可变的 Map,而 transactions 也是一个 userID 和交易列表对的 Map。
const mapStateToProps = (state) => {
const curUID = userSettingsState(state).get('currentUserID');
return {
trList: transactionsState(state).getIn([curUID, 'trList'])
};
};
我需要当前的 UID 来访问用户交易。上面的示例工作正常。但这是最好的方法吗?
好问题。是的,这是处理计算道具和生成派生数据的首选方式。这不仅是最好的方法,而且性能也非常好。 Cory House(一位在社区中众所周知的非常优秀的 React 开发人员)在推特上发布了与此类似的内容 a few days ago,他的相同方法适用于 mapStateToProps()
。您唯一的其他选择是将计算方法添加到 componentWillReceiveProps()
AND componentDidMount()
。正如您想象的那样,这很快就会变得一团糟。
现在,对您执行此操作的方式有所保留。
不要在这里放置异步调用!这也会导致渲染组件出现问题,因为 mapStateToProps()
在组件安装之前运行。如果您的组件在挂载之前等待 promises,那么您的性能将会受到影响。这可能是显而易见的。
说到性能,我个人正在为一个包含 8,600 个条目的下拉框生成派生数据,在用户输入时,对这 8,600 个条目应用模糊过滤器,重新呈现下拉列表,并显示一个新的过滤列表。性能问题为零,组件像黄油一样光滑。
我需要访问容器内 redux 状态的特定属性。这些属性将依次用作获取其他嵌套属性并将它们映射到组件属性的键。我使用 immutableJS。
在 mapStateToProps 中执行此操作的最佳方法是什么?这会导致任何性能开销吗?还是可以吗,因为 mapStateToProps 已经接收了整个状态作为参数?
这是一个例子。
状态选择器:
export const userSettingsState = state => state.get('userSettings');
export const transactionsState= state => state.get('transactions');
userSettings 是一个不可变的 Map,而 transactions 也是一个 userID 和交易列表对的 Map。
const mapStateToProps = (state) => {
const curUID = userSettingsState(state).get('currentUserID');
return {
trList: transactionsState(state).getIn([curUID, 'trList'])
};
};
我需要当前的 UID 来访问用户交易。上面的示例工作正常。但这是最好的方法吗?
好问题。是的,这是处理计算道具和生成派生数据的首选方式。这不仅是最好的方法,而且性能也非常好。 Cory House(一位在社区中众所周知的非常优秀的 React 开发人员)在推特上发布了与此类似的内容 a few days ago,他的相同方法适用于 mapStateToProps()
。您唯一的其他选择是将计算方法添加到 componentWillReceiveProps()
AND componentDidMount()
。正如您想象的那样,这很快就会变得一团糟。
现在,对您执行此操作的方式有所保留。
不要在这里放置异步调用!这也会导致渲染组件出现问题,因为 mapStateToProps()
在组件安装之前运行。如果您的组件在挂载之前等待 promises,那么您的性能将会受到影响。这可能是显而易见的。
说到性能,我个人正在为一个包含 8,600 个条目的下拉框生成派生数据,在用户输入时,对这 8,600 个条目应用模糊过滤器,重新呈现下拉列表,并显示一个新的过滤列表。性能问题为零,组件像黄油一样光滑。