Python的Redux实现
redux-p的Python项目详细描述
累赘
实现Redux存储,支持动态添加功能模块。存储区公开基于RxPY的反应式API。在
什么是Redux?为什么
复杂的应用程序(客户机或服务器)通常需要维护状态,应用程序越复杂,跟踪状态就越困难。Redux模式通过遵循Flux、CQRS和Event Sourcing的思想来处理复杂状态的管理。在
basic principle可以归结为:
- Single source of truth:整个应用程序的状态存储在单个存储中的对象树中。在
- State是只读的:更改状态的唯一方法是发出一个操作,一个描述发生了什么的对象。在
- 更改是用纯函数进行的:要指定状态树是如何通过操作进行转换的,请编写纯还原器。在
状态树
所有状态都保存在一个ReaduxRootState
类型的只读字典中。此状态由ReduxRootStore
对象维护和管理,该对象可以使用create_store()
方法创建。该存储允许调度操作、监听状态更改和添加新功能。在
动作
无法更改状态,但我们可以根据现有状态和action创建新状态。该操作描述如何转换当前状态。在
所有状态转换都是synchronous操作,将由一个reducer执行。在
减速器
Reducers是纯函数,它将当前状态对象转换为给定操作的新状态对象。在
史诗
所有计算新状态的操作都由同步减缩器执行,这是一个基本的重复原则。为了实现异步操作,我们引入了Epics的概念。epic将一个动作转换成另一个动作或一组动作,这种变换可以异步执行。由此产生的动作可以通过史诗产生新的动作,也可以由减速器来解释。在
我们将epic表示为一个reactive operator,它将一个动作输入序列(也可以选择是一个状态序列)转换成一个动作otput序列。在
功能模块
每个应用程序只能有一个redux store实例。在传统的redux中,这意味着在存储实例化时必须知道一组reducer和epic。这使得很难从一组可重用模块组成整个应用程序。在
我们引入了功能模块的概念,由dynamic modules和{a11}驱动。在
功能模块定义了一个唯一的标识符和可选的reducer、epic和依赖关系。标识符用于在顶级字典中确定状态的范围,并且可以在任何时间点向现有存储添加新的功能模块。在
提供功能模块
为您的模块创建并导出ReduxFeatureModule
的实例。模块定义包括:
- 唯一的模块标识符。此标识符还用作redux状态下的命名空间
- 在该命名空间上操作的可选reducer
- 处理异步操作的可选epic
- 此模块依赖的其他功能模块的可选列表
示例
fromreduximportcreate_feature_module,ReduxFeatureModulesample_feature_module:ReduxFeatureModule=create_feature_module('SAMPLE_FEATURE',sample_reducer,sample_epic,[dep1,dep2])
注册功能模块
使用add_feature_module
方法向根存储注册功能模块。这还将按拓扑顺序注册所有相关模块。在
使用功能模块
使用select_feature
方法为所需的特性创建选择器。在
示例
fromreduximportselect_featureselect_sample=select_feature(sample_feature)
功能模块中的副作用
功能模块可能会为异步处理提供副作用,也就是epics。有时这样的epic需要初始化事件来执行引导逻辑。存储将为此目的发送初始化事件ose,功能模块初始化后。使用of_init_feature
方法订阅此事件。在
示例
fromreduximportof_init_feature,Epicfromrx.operatorsimportmapinitEpic:Epic=lambdaactions_,state_:actions_.pipe(of_init_feature(sample_feature),map(...))
- 项目
标签: