reactjs - 如何在 mapStateToPropsMethod 中使用 React 组件的本地状态?
问题描述
我有一个反应组件,它创建一些本地状态:一个查询标识符。此查询标识符是在创建组件时创建的,并且不/不应从组件的使用者传入。此状态仅在组件实例中使用,不与其他任何东西共享——因此,感觉它适合作为组件中的本地状态,而不是存储在 redux 存储中。
react 组件通过 redux 调度异步操作,当操作完成时,结果将存储在 redux 状态的集合中,该集合由上述查询 id 索引。
在 React 组件的 mapStateToProps 函数中,我想从 redux 状态的查询结果集合中检索查询结果。但是,组件的查询 id 仅处于组件实例的本地状态,因此显然无法从 mapStateToProps 访问(因为 mapStateToProps 不是组件类的成员,并且显然没有办法访问该组件的本地状态实例)。
在 mapStateToProps 内部是否有一种既定的方式来访问 React 组件的本地状态?我知道我可以将本地状态存储在 redux 中(因此它在 mapStateToProps 中可用),但似乎没有必要,因为状态对于每个组件实例来说都是本地的。ownProps 参数看起来很有趣,但它似乎要求我的 React 组件的消费者在组件实例化时在 props 中传递一个值,这在此处不是必需的(甚至令人困惑)。
有没有预期的方法可以做到这一点?或者我是否设计了错误的组件,以至于我不应该尝试使用组件本地状态将 redux 状态正确映射到组件道具?
谢谢!
解决方案
无法在 mapStateToProps 方法中访问组件状态,因为它在connect
其中使用的是组件的包装器。
mapStateToProps
但是,如果您将状态提升到组件的父级,然后将其作为道具传递给子级,则可以在其中获取这些值。在这种情况下,您可以mapStateToProps
使用 ownProps 参数访问该值。但是,如果它只是该特定组件的本地状态,则无需将状态移动到父级。如果将状态移动到 redux 存储区,情况也是如此。
处理这种情况的更好方法是将整个值集从mapStateToProps
on 传递给组件,然后实现一个 memoized 方法,该方法根据数据和查询 id 返回结果
前任:
const mapStateToProps = (state, props) => {
return {
collection: resultCollectionSelector(state, props)
}
}
并在组件渲染方法中(您也可以在 componentDidUpdate 中执行并将值设置为状态,您需要在渲染之外的方法中使用它)
constructor(props) {
super(props);
this.getMemoizedFilteredResult = _.memoize(this.getFilteredResult);
}
getFilteredResult = (collection, query) => {
// process and return result
}
render() {
const queryResult = this.getMemoizedFilteredResult(this.props.collection, this.state.query);
...
}
推荐阅读
- python - 为什么这个 Django 视图无法通过 subprocess.call 运行 Powershell 脚本?
- pandas - Python Selenium 按类名查找元素不起作用
- java - 使用 Jsoup 解析表中的元素
- javascript - 在反应本机的 rn - 信用卡库之一中未检测到 Rupay 卡号
- java - 从树节点数组中删除子树
- javascript - 如何更新通过反应路由器链接传递的状态
- heroku - Heroku buildpack:更新系统文件
- python - 如何使用我需要的所有文件构建我的 python 项目?
- c++ - 使用 -fsanitize=address 时未定义的引用
- c++ - 如何在 C++20 中将整数转换为二进制?