我们正在创建一个大型前端应用程序。
我们正在使用React-Redux
我们正在创建一些可重用的组件。
- 这个问题是关于在同一个页面/路由上有多个相同的可重用redux react组件的示例 *
问题详情:
我们有一个Sectionheader
组件。它绑定到redux状态。
它监听头属性reducer SectionheaderReducer
。
因为我们在页面上有两个Sectionheader
的示例,它们都倾向于显示相同的值,因为它们被绑定到相同的存储状态属性。
如何使基于redux的可重用react组件可配置?这样每个示例都可以为reducer SectionheaderReducer
提供不同的header属性值
5条答案
按热度按时间zazmityj1#
你需要实现一些命名示例的方法,这可以是基本的,比如传入一个键来区分组件和reducer。
可以在
mapStateToProps
函数中使用ownProps
来引导到命名空间的Map字符串
可以使用相同的方法将命名空间传递给
mapDispatchToProps
型
只要记住在操作类型中使用名称空间,这样reducer就不会太过麻烦
型
并确保减速器也是命名空间的
型
现在,在组合缩减器时添加2个命名空间缩减器
型
最后将命名空间传递给每个示例
型
**免责声明:**我是以下库的主要贡献者。
redux-subspace可以提供更高级的命名空间实现,而不必为每个希望拥有多个示例的组件重新实现此模式。
创建缩减器的步骤与上述类似
型
然后,可以使用
SubspaceProvider
来切换出每个组件的状态型
只需确保您还将
mapStateToProps
函数更改为,以便从提供程序中Map的子树开始遍历型
如果您希望减少嵌套,还可以使用“高阶组件”。
9gm1akwq2#
我用不同的方式实现了它,实际上没有用名称空间更改操作名称。
相反,我添加了infra函数,它将拦截动作创建者并将
meta-data
添加到每个动作中。(在FSA
之后)这样你就不需要改变你的reducer或mapStateToProps
函数。它还与
redux-thunk
兼容。应该很容易使用... reducer-action-interceptor
webghufk3#
如果你正在使用Redux Toolkit,你可以考虑这个模式。你的
createSlice
initialState
将是一个对象,一个空对象开始。字符串
然后,您将有几个reducer来创建和删除初始状态(这将在组件的挂载和卸载时触发)
型
你可以看看this file on Stackblitz的完整代码。
接下来,我们将添加递增和递减操作以及一个名为
selectCounters
的selector function
:型
接下来,让我们处理集成的
Counter component
。请注意以下两点:1.我们在安装时创建组件状态,即在
useEffect
内部,并在卸载时删除它。<Counter />
接受id prop
以区分计数器型
就是这样!!现在,我们可以多次使用
re-usable <Counter id={"hello or any other number or string id"} />
:型
下面是Stackblitz上的工作示例:https://stackblitz.com/edit/stackblitz-starters-68admb?file=src%2FApp.tsx
x1c 0d1x的数据
92vpleto4#
我把这个问题解释为:
<SectionHeader />
)一个可能的解决方案是将“section”的概念添加到存储中。您可以创建管理数据内容结构的reducer。例如,存储状态可能看起来像这样:
字符串
{sections[2].header}
<SectionHeader title={sections[2].header} />
eagi6jfj5#
将我们的组件转换为哑(无状态)组件,以便这些组件可以轻松地重用,而不会产生任何并发症。