Dash 2.14版本开始支持动态回调注册!
本文示例代码已上传至我的
Github仓库https://github.com/CNFeffery/dash-master
大家好我是费老师,就在昨晚,Dash框架发布了其2.14.0新版本,新增的功能中,有一项非常令人兴奋,那就是其针对回调函数这一Dash中的核心概念,新增了动态回调函数注册的支持,下面我将对此做详细介绍:
在过去的Dash回调编写中,有一条准则,即应用中所有的回调函数必须在应用启动之前被定义:

举一个简单的例子,下面这个示例应用中定义了通过按钮点击,进行文字内容更新的回调函数逻辑,当用户在浏览器中访问该应用时,会在初始化时自动通过/_dash-dependencies接口获取到当前应用中所有已明确定义的回调函数编排信息:

而从Dash2.14.0版本开始,为callback()新增了参数_allow_dynamic_callbacks,针对设置了该参数为True的回调函数,我们可以在该回调函数内部定义回调函数,这些回调函数将会被动态的注册并生效。
举个示意性的例子,在下面的例子中,我们在按钮被点击后,向指定容器更新由一个输入框和文本组成的子元素,并且利用随机生成的uuid为它们构造id和回调函数,在为父级callback()设置_allow_dynamic_callbacks=True之后,即可实现这样的动态回调注册,从下面截图中抓包的网络请求过程可以看到,随回调触发而动态注册的回调,以异步的形式自动通过/_dash-dependencies接口更新到用户浏览器的回调编排规则中:

import uuid
import dash
from dash import html
import feffery_antd_components as fac
from dash.dependencies import Input, Output
app = dash.Dash(__name__, suppress_callback_exceptions=True)
app.layout = html.Div(
[
fac.AntdSpace(
[
fac.AntdButton(
'点我',
id='button-demo',
type='primary'
),
html.Div(
id='button-demo-output'
)
],
direction='vertical'
)
],
style={
'padding': 50
}
)
@app.callback(
Output('button-demo-output', 'children'),
Input('button-demo', 'nClicks'),
prevent_initial_call=True,
_allow_dynamic_callbacks=True
)
def demo_callback(nClicks):
new_uuid = str(uuid.uuid4())
@app.callback(
Output(f'demo-input-output-{new_uuid}', 'children'),
Input(f'demo-input-{new_uuid}', 'value')
)
def dynamic_demo_callback(value):
return f'已输入内容:{value}'
return fac.AntdSpace(
[
fac.AntdInput(
id=f'demo-input-{new_uuid}',
placeholder='请输入'
),
fac.AntdText(
id=f'demo-input-output-{new_uuid}'
)
]
)
if __name__ == '__main__':
app.run(debug=True)
且只要动态回调函数的构建过程在相应父级回调函数内部执行即可,譬如下面的写法与上面效果等价,这意味着我们可以以更自由更高效的方式构建功能持续增长的大型平台应用:

要注意的是,该特性目前处于实验阶段,大家在测试过程中有遇到问题欢迎到https://github.com/plotly/dash/issues反馈。
以上就是本文的全部内容,对Dash应用开发感兴趣的朋友,欢迎添加微信号CNFeffery,备注“dash学习”加入我的技术交流群,一起成长一起进步。
Dash 2.14版本开始支持动态回调注册!的更多相关文章
- activiti5.14版本在线流程设计器的国际化中文支持
参考了前辈的一些国际化支持做法,加上自己对流程的一些理解,做了activiti5.14版本的国际化支持.发现有若干bug,比如属性设置弹出窗口里的grid里的下拉列表不支持显示中文(要修改oryx.d ...
- 第14章 使用DHCP动态管理主机地址
章节简述: DHCP协议服务能够自动化的管理局域网内的主机IP地址,有效的提升IP地址使用率,提高配置效率,减少管理与维护成本. 学习dhcpd服务程序的使用方法并逐条讲解配置参数,完整演示自动化分配 ...
- Omi应用md2site-0.5.0发布-支持动态markdown拉取解析
写在前面 Md2site是基于Omi的一款Markdown转网站工具,使用简单,生成的文件轻巧,功能强大. 官网:http://alloyteam.github.io/omi/md2site/ Git ...
- Gerrit代码审计系统实战-Gerrit 2.15.14版本快速搭建
Gerrit代码审计系统实战-Gerrit 2.15.14版本快速搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Gerrit版本选择 1>.查看Gerrit官网 ...
- java使用poi操作word, 支持动态的行(一个占位符插入多条)和表格中动态行, 支持图片
依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifa ...
- 如何让FasterTransformer支持动态batch和动态sequence length
FasterTransformer 算子 nvidia在开源的FasterTransformer的代码中,提供tensorrt和tensorflow的自定义算子编译和py调用示例,详见FasterTr ...
- ABBYY FineReader 12/14版本功能对比及14产品优势
FineReader 是一款一体化的 OCR 和PDF编辑转换器,随着版本的更新,功能的增加,FineReader 14的推出继续为用户在处理文档时提高业务生产力,该版本包含若干新特性和功能增强,包括 ...
- 使用的 SQL Server 版本不支持数据类型“datetime2”.
错误原因,在使用ado.net entity的时候,entity使用的数据库是sqlserver 2008, 但后来实际使用中使用的数据库是sqlserver 2005, 使用的 SQL Server ...
- 关于IE8及其以下的IE版本不支持getElementsByClassName
之前做一下项目的时候知道IE8以及其以下的版本不支持getElementsByClassName,于是乎自己写了一个函数重新定义getElementsByClassName,函数代码如下: funct ...
- ruby on rails 2.3+的版本不再支持cgi
ruby on rails 2.3+的版本不再支持cgi了,恶心到了,换其他框架,看了款cramp,完全没资料,完全不让人入门 操蛋的厉害,ruby果然是小众的窝里乐,放弃使用
随机推荐
- Taurus .Net Core 微服务开源框架:Admin 插件【3】 - 指标统计管理
前言: 继上篇:Taurus .Net Core 微服务开源框架:Admin 插件[2] - 系统环境信息管理 本篇继续介绍下一个内容: 1.系统指标节点:Metric - API 界面 界面图如下: ...
- ERP开发流程
一.使用Xshell连线执行r.r adzi140 或 助记码r.t 都可以打开数据表设计器 表格建完后,DBA前三个需要点一下,如果表格显示需要表格重建,点最后一个,表格新建完成后,记得点击执行异动 ...
- grafana Variables 变量的使用
概念澄清 A variable is a placeholder for a value. # 变量是值的占位符. # 参考文档:https://grafana.com/docs/grafana/la ...
- Angular: 点击一次按钮,增加一个元素
解决方案 思路 在组件的typesscript文件中,创建一个数组来存储每个按钮的信息 在模板中使用 *ngFor 指令来循环渲染按钮列表 在按钮事件的处理函数中,每次点击按钮时向按钮数组添加一个新的 ...
- searchsploit用法
kali里面自带这个工具,用来搜索www.exploit-db.com上面的漏洞库,在由于是提前内置了数据库所以不联网也可以用. 使用之前先更新一下确保是最新的漏洞库 searchsploit --u ...
- 部署安装kafka集群
准备 zookeeper节点: 172.50.13.103 172.50.13.104 172.50.13.105 kafka版本: 2.13-2.7.0 安装步骤 部署安装zookeeper集群.参 ...
- C# OpenCVSharp图像入门_给绿幕图片视频加背景
OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库.OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研 ...
- css里的position的static|relative|absolute|fixed的区别
前提:仅以div块为例,其它不清楚 注:1.下面截图看起来不是从页面左上角位置开始,是因为body元素有默认的margin,有边框 2.当position不是static时,top和bottom需要指 ...
- 网络请求-Android篇(Okhttp和Retrofit)
一.OkHttp的介绍和基本用法 OkHttp是一个流行的开源Java和Android应用程序的HTTP客户端.它由Square Inc.开发,提供了一种简单高效的方式来进行应用程序中的HTTP请求. ...
- 一次搞定:借助Hutool封装代码快速解决webservice调用烦恼
前言 相信很多同行哪怕学了许多主流技术,但工作上依然免不了和传统企业打交道,而这样的企业往往还在用webservice做接口交互. 本文是作者近两年和医疗行业的厂家打交道研究出来的一点调用webser ...