【发布时间】:2016-07-04 17:32:20
【问题描述】:
在基于 React + Redux 的项目中,我有一个 connect()ed 组件,它通过 API 获取检查用户权限。获取的权限存储在 Redux 存储中。
该组件基本上看起来像<Can check="...">...</Can>,它与我们的 API(通过 Redux 操作)对话以解决检查。如果授予权限,则呈现this.props.children,否则呈现null。
为此,mapStateToProps() 根据存储中的授权数据计算 passes 属性,该属性在 <Can />s render() 方法中检查。我利用mapStateToProps() 的ownProps 参数来获取“要检查的内容”并计算passes 标志。
有一些缓存正在进行,所以我不会在每个组件安装上重新获取,它基本上可以工作。但是,有时,当 passes 属性更新为 true 时,组件不会重新渲染(但是它会在导航离开后渲染 - 使用反应路由器 - 并再次返回,所以基本上如果组件被重新安装)。
如果mapStateToProps() 的输出发生变化,connect()ed 组件是否会重新渲染? react-redux 的 connect() 的文档是这样说的:
如果将 ownProps 指定为第二个参数,则其值将是传递给组件的 props,并且每当组件接收到新的 props 时都会重新调用 mapStateToProps。
这是否意味着传入ownProps 会将渲染更改为仅在道具更改时或以其他方式重新渲染?我如何理解关于从mapStateToProps() 中记忆/返回函数的注释,或者这甚至不相关?
谢谢
【问题讨论】:
标签: javascript reactjs redux