本文示例程式碼已上傳至我的
Github
倉庫:https://github.com/CNFeffery/dash-masterGitee同步倉庫地址:https://gitee.com/cnfeffery/dash-master
大家好我是費老師,上週Dash
釋出了2.18.0
新版本,並於今天釋出了可穩定使用的2.18.1
版本(自古.1
版本最穩✌),今天的文章中就將針對2.18.1
穩定版本中已修復的問題及調整的內容做簡要介紹。
終端執行下列命令將Dash
升級到最新版本:
pip install dash -U
1 修復了回撥返回單個no_update進行批次控制不生效的問題
在2.18.0
之前的版本中,針對編排了多個Output
角色的回撥函式,若我們希望在某些條件分支下,取消本次回撥觸發對所有Output
角色的更新,常用的方式是直接return dash.no_update
,這裡的單個dash.no_update
就可以直接快捷概括對所有Output
的不更新。
舉個簡單的例子,我們透過按鈕的點選來觸發3個不同目標內容的更新,且當點選次數為偶數時取消更新,在之前的2.18.0
版本中,這個快捷寫法會觸發下圖所示錯誤:
2.18.1
版本中則對此問題進行了修復,可以看到功能正常了,即只有點選次數為奇數時才更新內容:
本例子完整程式碼:
app1.py
import dash
from dash import html
import feffery_antd_components as fac
from dash.dependencies import Input, Output
from feffery_dash_utils.style_utils import style
app = dash.Dash(__name__)
app.layout = html.Div(
[
fac.AntdSpace(
[
f"Dash版本: {dash.__version__}",
fac.AntdButton("點我試試", id="demo-button", type="primary"),
fac.AntdText(id="demo-output1"),
fac.AntdText(id="demo-output2"),
fac.AntdText(id="demo-output3"),
],
direction="vertical",
align="center",
)
],
style=style(padding=50),
)
@app.callback(
[Output(f"demo-output{i}", "children") for i in range(1, 4)],
Input("demo-button", "nClicks"),
prevent_initial_call=True,
)
def demo_callback(nClicks):
# 僅在nClicks為奇數時觸發
if nClicks % 2 == 1:
return (
f"nClicks: {nClicks}",
f"nClicks x 2: {nClicks*2}",
f"nClicks x 3: {nClicks*3}",
)
# 不更新任何內容
return dash.no_update
if __name__ == "__main__":
app.run(debug=True)
2 修復了全域性/區域性回撥函式錯誤處理機制+字典化角色編排時的異常
Dash 2.18版本新特性介紹一文中我們介紹了Dash
從2.18.0
開始新增的全域性/區域性回撥錯誤處理機制,但此特性在結合回撥函式字典化角色編排時,會功能異常,譬如我們將上面例子中的回撥函式改造為字典化編排的形式:
# 這裡on_error簡單寫個匿名函式示意
app = dash.Dash(__name__, on_error=lambda e: print(e))
...
@app.callback(
output=dict(
demo_output1=Output("demo-output1", "children"),
demo_output2=Output("demo-output2", "children"),
demo_output3=Output("demo-output3", "children"),
),
inputs=dict(nClicks=Input("demo-button", "nClicks")),
prevent_initial_call=True,
)
def demo_callback(nClicks):
# 僅在nClicks為奇數時觸發
if nClicks % 2 == 1:
return dict(
demo_output1=f"nClicks: {nClicks}",
demo_output2=f"nClicks x 2: {nClicks*2}",
demo_output3=f"nClicks x 3: {nClicks*3}",
)
# 故意觸發錯誤
raise Exception("自定義錯誤")
在之前的2.18.0
版本中,錯誤處理遇上字典化角色編排就會出現多餘的錯誤:
而在2.18.1
中,此問題得到了有效修復,可以看到,示例中正常捕獲到了錯誤:
3 開始棄用舊的run_server()方法
Dash
早期啟動應用的方式為app.run_server()
,後面新增了更推薦的app.run()
方式。而從2.18.1
版本開始,正式將app.run_server()
標記為廢棄方法,並將在未來的Dash
3.0版本中正式移除此方法,大家統一換成app.run()
即可。
除此之外,此次版本更新中還對dash.Dash()
中的plugins
、long_callback_manager
引數標記為廢棄,完整的更新內容說明請移步https://github.com/plotly/dash/releases/tag/v2.18.1
。
以上就是本文的全部內容,對Dash
應用開發感興趣的朋友,歡迎新增微訊號CNFeffery
,備註“dash學習”加入我們的技術交流群,一起成長一起進步。