本文示例代码已上传至我的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. 【构建docker镜像之插件篇】使用插件实战演示:docker-maven-plugin和jib-maven-plugin

    1.说明: docker容器化部署是非常流行的,Java应用如果要运行在docker环境,就要制作包含该应用的docker镜像,可以手动使用dockerfile和docker-compose制作镜像, ...

  2. python快速入门【三】-----For 循环、While 循环

    python入门合集: python快速入门[一]-----基础语法 python快速入门[二]----常见的数据结构 python快速入门[三]-----For 循环.While 循环 python ...

  3. 【CSDN浏览器插件测评超详细版】——万能便捷的C功能,直接爱不释手,强烈推荐!更多功能等你探索

    我的界面预览: 1.下载安装 下载链接:https://plugin.csdn.net/?utm_source=chajian-contest-1210#/chrome-index-help 说明:若 ...

  4. navicat破解(15以前的版本)

    navicat破解各种不成功,很耽误事.所以,再次整理一个相对省事有效的办法.内容如下: 一:下载此激活工具 二:按下图生成激活码 1. 2. 点击手动激活 3. 将请求码按图粘贴,按图点击操作便可激 ...

  5. .NET Core开发实战(第15课:选项框架:服务组件集成配置的最佳实践)--学习笔记

    15 | 选项框架:服务组件集成配置的最佳实践 这一节讲解如何使用选项框架来处理服务和配置的关系 选项框架的特性: 1.支持单例模式读取配置 2.支持快照 3.支持配置变更通知 4.支持运行时动态修改 ...

  6. 基于C#的屏幕鼠标跟随圈圈应用 - 开源研究系列文章

    去年8月的时候无聊,想起博客网页中的鼠标跟随圈圈效果,于是就想用C#在Windows操作系统级别的基础上去开发一个类似的应用,于是有了此文.上次在博问里也发帖咨询了一下( https://q.cnbl ...

  7. LVM(逻辑卷管理器)

    目录 一.LVM概述 二.基本术语 三.PE.PV.VG.LV之间的关系 四.LVM的工作原理 五.LVM的使用 1.部署逻辑卷 第一步: 还原快照,并在虚拟机添加两块新硬盘设备,开机 第二步: 让新 ...

  8. ABC 333

    ABCDE 赛时 AC. F 列方程:\(f_{i,j}\) 表示有 \(i\) 个人,第 \(j\) 个人最终活下来的概率. \(f_{i,1}=\dfrac{1}{2}f_{i,i}\),因为只有 ...

  9. P1405 苦恼的小明 题解

    题目传送门 前置知识 扩展欧拉定理 解法 本题幂塔是有限层的,这里与 luogu P4139 上帝与集合的正确用法 中的无限层幂塔不同,故需要在到达递归边界 \(n+1\) 时进行特殊处理,对于处理 ...

  10. NC16498 [NOIP2014]寻找道路

    题目链接 题目 题目描述 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1.路径上的所有点的出边所指向的点都直接或间接与终点连通. 2. ...