Dash 2.16版本新特性介绍

添加微信号CNFeffery备注“dash学习”

即刻加入dash应用开发技术交流群

本文示例代码已上传至我的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'), TrueFalse]
    ],
    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学习

即刻加入dash应用开发技术交流群

相关推荐

  • 别再用 offset 和 limit 分页了,性能太差!
  • 缓存有大key?你得知道的一些手段
  • 构建计费系统的 14 个痛点!
  • 在Google工作3.3年的研究科学家,开始创业从零试水训练大模型的1年:工作量翻倍,“坑”太多了!
  • 中国高中生,在 GitHub 拿下 50000+ Star
  • 工业项目能耗管理可以捡现成的了,还开源
  • 16.1K Star惊呆了!前沿的VR虚拟现实项目开源了,赶紧下载学习
  • 博士申请 | 阿联酋MBZUAI Fahkri Karray教授招收因果表征学习方向全奖博士生
  • 简单却有效的Agent推理框架:通过预测未来大幅提升智能体的规划能力
  • 向数字世界AGI迈进!让智能体直接控制键盘、鼠标,与一切软件交互
  • 新零售SaaS架构:订单履约系统架构设计(万字图文总结)
  • GitHub 2K+星、B站播放量超30万,大模型入门看这本书就够了!
  • Claude 3 免费试用,顺便白嫖5美元
  • 居中一个div有那么难吗,这都不会你怎么当前端的?
  • 开源日报 | “Google=开源,好评;Microsoft=闭源收入还低,差评”;Linux基金会推出“反诈”开源项目
  • 有奖问答 | 如何利用Excelize高效处理Excel办公文档
  • 2024“跨平台”不香了?知名开源项目淘汰Xamarin,转向原生开发
  • 一个 Python 的轻量级搜索工具
  • 高瓴迎来“看牌时刻”
  • Uber CacheFront:每秒 40 M 的读取,延迟显著降低