在React中,通常将组件传递给工厂函数,该函数告诉组件如何呈现其子代(例如render props模式)。当组件需要呈现遵循特定模板的多个子代时,就会发生这种情况。
在Plotly Dash(React的包装器)中,似乎我们可以通过合成将组件传递给其他组件。
app.layout = html.Div(children=[
html.H1(children='Hello Dash'),
html.Div(children='''
Dash: A web application framework for Python.
'''),
])
但是,似乎我们无法将工厂函数传递给组件,因为明确禁止了in the guide:
JavaScript函数不是有效的输入参数
鉴于此,我们如何在Dash自定义组件中模仿此工厂功能模式?我正在尝试为react-awesome-query-builder创建一个Dash包装器,它希望我像这样调用它,其中get_children
是一个返回组件的工厂函数。
<Query
{...config}
get_children={this.getChildren}
onChange={this.onChange}
></Query>
我当前的想法是我们可以将模板组件传递给Dash中的Query组件,然后可以使用React.cloneElement()
进行克隆,并修改其道具,让我像这样使用它:
app.layout = Query(child_template=html.Div("Template"))
这项工作有效吗?如果没有,有什么办法可以在Dash中制作这些高阶组件?