Dash回调Input数量与绑定函数形参数量不匹配问题咨询
Dash 回调入参与装饰器声明数量不匹配的实现原理
这个写法完全符合Dash的官方回调参数映射规则,差异来自漏统计了装饰器中声明的State项。
Dash的app.callback装饰器按固定顺序接收三类参数,和回调函数的入参、返回值的映射规则非常明确:
- 第一类:
Output声明
这部分用来定义回调函数的返回值要绑定到哪些前端组件的对应属性,完全不会作为入参传入回调函数。这段代码里共声明了5个Output,对应回调执行完成后,需要按相同顺序返回5个值,分别更新id为plot1到plot5的组件的children属性。 - 第二类:
Input声明
这部分用来定义回调的触发条件:只要任意一个Input绑定的组件属性发生变化,就会触发回调执行。所有Input绑定的属性当前值,会按照声明顺序,作为前序入参传入回调函数。这段代码共声明2个Input,对应回调函数的前2个入参:chart接收input-type组件的当前value,year接收input-year组件的当前value。 - 第三类:
State声明
这部分用来定义回调执行时需要额外读取的组件状态,State绑定的属性值变化不会触发回调,但回调被Input触发时,会把所有State绑定的属性当前值按声明顺序,接在Input的入参之后传入回调函数。这段代码共声明了5个State,分别读取plot1到plot5的现有children属性,对应回调函数里剩下的5个入参children1、children2、c3、c4、c5。
三类参数统计下来:2个Input + 5个State = 7个传入回调的入参,和get_graph函数定义的7个入参完全对应。
贴出的代码片段里的
enter code here是代码编辑时的残留标记,不属于Dash语法,实际运行时需要删掉。
这段代码加State的作用和注释描述一致:回调触发时可以拿到5个绘图区域的现有内容,避免用户没填完所有表单信息时就错误更新、清空图表。
内容的提问来源于stack exchange,提问作者Harry Z. Huang
相关产品推荐
相关产品推荐

