我们正在创建一个大型前端应用程序 .
我们正在使用React-Redux
我们正在创建一些可重用的组件 .
这个问题是关于在同一页面/路线上有多个相同的可重复使用的redux反应组件的实例
Problem details:
我们有一个Sectionheader组件 . 它与redux状态绑定 .
它侦听header属性reducer SectionheaderReducer .
由于我们在页面上有2个此Sectionheader实例,因此它们都会显示相同的值,因为它们绑定到同一个store-property .
如何使基于redux的可重用反应组件可配置 . 因此每个实例可以为减速器具有不同的头属性值SectionheaderReducer
3 回答
您需要实现命名空间实例的某种方式 . 这可以像传入键来区分组件和减速器一样基本 .
您可以使用
mapStateToProps
函数中的ownProps
来指导映射到命名空间可以使用相同的方法将命名空间传递给
mapDispatchToProps
只记得在动作类型中使用命名空间,这样减速器就不会踩到脚趾
并确保reducer也是命名空间
现在在组合reducers时添加2个名称空间缩减器
最后将命名空间传递给每个实例
Disclaimer: 我是以下图书馆的主要撰稿人 .
redux-subspace可以提供更高级的命名空间实现,而无需为希望拥有多个实例的每个组件重新实现此模式 .
创建reducer与上面类似
然后
SubspaceProvider
可用于切换每个组件的状态只需确保您还要更改
mapStateToProps
函数,以便从提供程序中映射的子树开始遍历如果您希望减少嵌套,还有一个Higher-Order Component .
我已经以不同的方式实现了它,而没有用命名空间实际更改动作名称 .
相反,我添加了infra函数,它们将拦截动作创建者并为每个动作添加
meta-data
. (关注FSA
)这样您就不需要更改减速器或mapStateToProps
功能 .它也与
redux-thunk
兼容 .应该很容易使用... reducer-action-interceptor
我将这个问题解释为:
您在商店中有内容数据(例如章节及其 Headers )
你有用于绘制数据位的组件(例如你的
<SectionHeader />
)您希望在页面上显示多个部分,但目前所有 Headers 都具有相同的文本
一种可能的解决方案是让您将“部分”的概念添加到您的商店 . 您将创建用于管理数据内容结构的Reducer . 例如 . 商店状态,有时可能如下所示:
要么