Python的Redux实现

redux-p的Python项目详细描述


累赘

实现Redux存储,支持动态添加功能模块。存储区公开基于RxPY的反应式API。在

什么是Redux?为什么

复杂的应用程序(客户机或服务器)通常需要维护状态,应用程序越复杂,跟踪状态就越困难。Redux模式通过遵循FluxCQRSEvent 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方法向根存储注册功能模块。这还将按拓扑顺序注册所有相关模块。在

^{pr2}$

使用功能模块

使用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(...))

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
通过拖动Java Swing scroll JScrollPane   使用springrest控制器的java   为什么使用Java客户端传输的数据在Apache Pulsar上显示为编码?   java当数组位于arraylist中时,如何访问它?   用于处理{Item1}的正则表达式代码。将项2放入数组或列表中   java mouseListener让我的JList表现得很奇怪   java SecurityContextHolder尽管成功登录,但仍承载匿名用户   java如何在selenium自动化中使用captcha   eclipse如何在java中检查按钮是否可单击,SeleniumWebDriver。ps:检查是否可点击,不要等到它可点击   java Android存在读取\调用\日志权限问题   java按这种方式进行取整(保持小数)   Java中检查布尔数组的最快方法   java将列表中的元素替换为其他元素   JavaFX中的javaunicode补充平面   java如何使用hashmap显示图像url