Python的反应式状态管理
项目描述
Observ 👁
Observ是Vue.js的Vue.js的计算属性和观察者的Python版本。它是事件循环/框架无关的,并且只有一个纯Python依赖项(patchdiff),因此可以用于任何目标Python >= 3.9的项目。
Observ为有状态的应用程序提供以下两个好处
- 您不再需要手动无效化和重新计算状态(例如,通过脏标志)
- 计算状态会自动无效化
- 计算状态会懒加载重新评估
- 您可以响应状态的变化(计算或非计算),实现单向流
- 状态变化 导致 视图变化(例如,状态变化回调更新UI小部件)
- 视图 触发 输入事件(例如,在UI中触发鼠标事件)
- 输入事件 导致 状态变化(例如,鼠标事件更新状态)
API
from observ import reactive, computed, watch
state = reactive(state)
Observe nested structures of dicts, lists, tuples and sets. Returns an observable proxy that wraps the state input object.
watcher = watch(func, callback, deep=False, immediate=False)
使用callback(old_value, new_value)
响应在func
中访问的状态的变化。返回一个观察者对象。使用del
删除它以禁用回调。
wrapped_func = computed(func)
基于可观察状态,使用func
定义计算状态并懒加载重新计算。返回一个包装后的函数副本,只有当它所依赖的状态中任何一个变脏时才重新计算输出。可以作为函数装饰器使用。
注意:自本README创建以来,API已演变并变得更加强大。跟踪问题#10以了解observ文档的更新。
快速开始和示例
使用pip/pipenv/poetry安装observ
pip install observ
查看examples/observe_qt.py
,了解使用observ的简单示例。
查看examples/store_with_undo_redo.py
,了解使用内置撤销/重做能力的Store抽象的简单示例。
注意事项
Observ会保留传递给reactive
的对象引用,以跟踪依赖项和该对象的代理。当传递给reactive
的对象不由其他代码管理时,observ应在代理被销毁时自动清理其引用。然而,如果存在对原始对象的另一个引用,则observ仅在垃圾收集器运行且所有其他对对象的引用都已消失时才释放其自己的引用。因此,最佳实践是**不保留**原始数据的引用,而仅使用反应式代理进行工作。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。