本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/dash-master

  大家好我是费老师,几天前Dash发布了其2.16.0版本,随后在修复了一些潜在问题后,于今天发布了可稳定使用的2.16.1版本,执行下面的命令进行最新版本Dash的安装:

pip install dash -U

  2.16版本中为我们带来了多项强大的新功能,进一步提升了Dash应用开发的效率和灵活性,下面我们就来一起get其中的重点:

1 常规回调新增running参数

  新版本中为常规的回调函数新增了running参数,使得我们可以针对若干个Output目标属性,快捷定义其在当前回调函数运行中未运行状态下分别的属性值,参数格式如下:

running=[
[Output('目标id', '目标属性'), 运行时的值, 未运行时的值],
...
]

  举个简单的例子,针对fac中的开关组件AntdSwitch,假如其每次被用户点击进行状态切换后,都会在对应回调函数中执行具有一定耗时的计算过程,那么配合running参数,我们就可以快捷实现当回调运行时,开关呈现加载中状态

app1.py

import time
import dash
from dash import html
import feffery_antd_components as fac
from dash.dependencies import Input, Output app = dash.Dash(__name__) app.layout = html.Div(
[
fac.AntdSwitch(
id='switch-demo',
checked=False
),
html.Div(id='message-container')
],
style={
'padding': 50
}
) @app.callback(
Output('message-container', 'children'),
Input('switch-demo', 'checked'),
running=[
[Output('switch-demo', 'loading'), True, False]
],
prevent_initial_call=True
)
def switch_demo(checked): time.sleep(1) return fac.AntdMessage(
content='已开启' if checked else '已关闭',
type='success'
) if __name__ == '__main__':
app.run(debug=False)

2 浏览器端回调新增set_props()方法

  在过去的版本中,我们如果需要通过回调函数对目标组件的相应属性值进行更新,需要在编写回调函数时提前书写编排好相应的角色,而从2.16版本开始,Dash针对浏览器端回调,新增了set_props()方法,其第一个参数用于定义目标组件id,第二个参数用于定义针对目标组件需要更新的属性字典。

  基于这个特性,我们可以在日常编写回调逻辑的过程中,进行很多技巧性的灵活操作,譬如,在下面的例子中,每次点击按钮,都会批量更新下方各个区块的内容和字体大小:

  对应源码如下,可以看到其中对应的浏览器端回调函数编排中无需编排相应区块角色,均在函数体中基于set_props()实现:

app2.py

import dash
from dash import html
import feffery_antd_components as fac
from dash.dependencies import Input, Output app = dash.Dash(__name__) app.layout = html.Div(
[
fac.AntdButton(
'点我',
id='trigger-demo',
type='primary'
),
fac.AntdRow(
[
fac.AntdCol(
fac.AntdCenter(
id=f'demo-block{i+1}'
),
span=4,
style={
'padding': 5
}
)
for i in range(30)
]
)
],
style={
'padding': 50
}
) app.clientside_callback(
'''(nClicks) => {
// 内部自由批量更新其他目标属性
for ( let i = 1; i <= 30; i++ ) {
// 调用set_props()
window.dash_clientside.set_props(
`demo-block${i}`,
{
children: `nClicks: ${nClicks || 0}`,
style: {
height: 100,
background: '#262626',
color: 'white',
borderRadius: 4,
fontSize: Math.min(14 + nClicks, 24)
}
}
)
} return window.dash_clientside.no_update;
}''',
Output('trigger-demo', 'id'),
Input('trigger-demo', 'nClicks')
) if __name__ == '__main__':
app.run(debug=False)

  最骚的是,set_props()的使用不限于浏览器端回调内部,譬如我们直接在浏览器控制台中就可以调用进行更新:

  这意味着从此之后,Dash可以不依赖具体的回调函数,与其他任意的javascript生态相通,譬如我们可以在原生Echarts的图表事件监听函数中直接操控Dash中的相关组件,这将极大程度上拓展Dash的灵活程度~


  以上就是本文的全部内容,对Dash应用开发感兴趣的朋友,欢迎添加微信号CNFeffery,备注“dash学习”加入我的技术交流群,一起成长一起进步。

Dash 2.16版本新特性介绍的更多相关文章

  1. EOS1.1版本新特性介绍

    EOSIO/eos 目前在github的项目活跃度方面排名第一,release版本更新的速度让人应接不暇.今天EOS的大版本1.1发布,我也有幸参与了贡献,本篇文章重点介绍1.1版本的重大功能升级. ...

  2. xmake v2.1.5版本新特性介绍

    2.1.5版本现已进入收尾阶段,此版本加入了一大波新特性,目前正在进行稳定性测试和修复,在这里,先来介绍下新版本中引入了哪些新特性和改进. 1. 提供类似cmake的find_*系列接口,实现各种查找 ...

  3. react 16.8版本新特性以及对react开发的影响

    Facebook团队对社区上的MVC框架都不太满意的情况下,开发了一套开源的前端框架react,于2013年发布第一个版本. react最开始倡导函数式编程,使用function以及内部方法React ...

  4. CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系

    CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...

  5. Atitit mac os 版本 新特性 attilax大总结

    Atitit mac os 版本 新特性 attilax大总结 1. Macos概述1 2. 早期2 2.1. Macintosh OS (系统 1.0)  1984年2 2.2. Mac OS 7. ...

  6. dubbox新特性介绍

    dubbx是当当网对原阿里dubbo2.x的升级,并且兼容原有的dubbox.其中升级了zookeeper和spring版本,并且支持restfull风格的远程调用. dubbox git地址:  h ...

  7. Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性

    Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性 Apache hadoop 项目组最新消息,hadoop3.x以后将会调整方案架构,将Mapreduce 基于内存+io+ ...

  8. framework各版本新特性(为面试准备)

    菜鸟D估计描述这些新特性的文章都是烂大街的货色,之所以拿出来分(e)享(xin)一下,有两个原因:1.当年面试的时候有人问到,我不知道该怎么回答:2.项目需要发布了,但是考虑到framework的版本 ...

  9. Xcode9新特性介绍-中文篇

    背景: Xcode 9 新特性介绍: 1.官方原文介绍链接 2.Xcode9 be ta 2 官方下载链接 本文为官方介绍翻译而来,布局排版等都是按照官方布局来的. 与原文相比,排版上基本还是熟悉的配 ...

  10. React 16.x 新特性思维导图

    React 16版本相对于以前的版本做了很大的改动,下面是我整理的React 16.x 新特性的思维导图文件,欢迎围观和指导:

随机推荐

  1. 深度学习应用篇-计算机视觉-语义分割综述[6]:DeepLab系列简介、DeepLabV3深入解读创新点、训练策略、主要贡献

    深度学习应用篇-计算机视觉-语义分割综述[6]:DeepLab系列简介.DeepLabV3深入解读创新点.训练策略.主要贡献 0.DeepLabV3深入解读 1.DeepLab系列简介 1.1.Dee ...

  2. 【8】同步vscode配置和插件【导入导出】、再也不用担心换电脑重新安装插件了

    相关文章: [1]VScode中文界面方法-------超简单教程 [2]VScode搭建python和tensorflow环境 [3]VSCode 主题设置推荐,自定义配色方案,修改注释高亮颜色 [ ...

  3. 20.6 OpenSSL 套接字分发RSA公钥

    通过上一节的学习读者应该能够更好的理解RSA加密算法在套接字传输中的使用技巧,但上述代码其实并不算完美的,因为我们的公钥和私钥都必须存储在本地文本中且公钥与私钥是固定的无法做到更好的保护效果,而一旦公 ...

  4. tomcat各版本与jdk及servlet各版本对应关系

    在项目部署的时候,如果对于Web应用没有选择正确的Web服务器版本,应用可能不能正常运行.下图为官方给的Servlet/JSP各规范与Web服务器Tomcat各版本的对应关系,如:支持Servlet ...

  5. VB6的WindowsXP控件引擎 - 开源研究系列文章

    这几天翻了一下原来VB6的代码,将一些有用的代码进行了整理,然后将这些代码记录下来,开源出来,让需要的朋友能够进行代码复用. 这次介绍的是一个VB6的WindowXP的控件引擎代码,主要是在程序启动的 ...

  6. 【C语言深度解剖】一篇搞懂结构体内存对齐【结构体的大小你会算了吗】

    结构体内存对齐 大家好,我是西城s 文章目录 前言 引入 结构体内存对齐 `offsetof`宏的使用 为什么存在结构体内存对齐 修改默认对齐数 尾声 前言 作者: #西城s 这是我的主页:#西城s ...

  7. ABC 326

    E 题意: 给定一个 \(n\) 面骰,长度 \(n\) 的数组 \(a\) 和一个初始为 \(0\) 的变量 \(x\). 每次投掷骰子,等概率获得 \(1 \sim n\) 中的一个数 \(p\) ...

  8. SP21690 POWERUP - Power the Power Up 题解

    题目传送门 前置知识 扩展欧拉定理 解法 直接对 \(a\) 和 \(b^c\) 分讨,跑一遍扩展欧拉定理就行了. 另外由于本题的特殊规定 \(0^0=1\),故需要在当 \(a=0\) 时,对 \( ...

  9. Codeforces Round #821 (Div. 2) A-E

    比赛链接 A 题解 知识点:贪心. 下标模 \(k\) 相同分为一组,共有 \(k\) 组,组间不能互换,组内任意互换. 题目要求连续 \(k\) 个数字,一定能包括所有的 \(k\) 组,现在只要在 ...

  10. 【OpenGL ES】绘制圆形

    1 前言 ​ [OpenGL ES]绘制三角形 中介绍了绘制三角形的方法,[OpenGL ES]绘制正方形中介绍了绘制正方形的方法,本文将介绍绘制圆形的方法. ​ OpenGL 以点.线段.三角形为图 ...