我的应用结构如下(HighOrderComponent
是Alt' AltContainer
包装器:
<App>
<HighOrderComponent store={someStore...}>
<MyCanvasComponent ref="canvasRef" />
</HighOrderComponent>
</App>
我需要从collectData()
公开MyCanvasComponent
方法,因为在App
组件中单击按钮后,画布需要将其内容转换为base64图像。
我希望在button
click
处理程序中能够使用this.refs.canvasRef.collectData()
。
不幸的是,似乎没有考虑嵌套组件refs
。我知道一般refs
应该被认为是私人的(即属于HighOrderComponent
),但是 -
它们也不可用,这意味着如果我分配ref="highOrderComponentRef"
,那么this.refs.highOrderComponentRef
就可以了,但this.refs.highOrderComponentRef.refs.canvasRef
不会。
HighOrderComponent
是一个通用组件,因此不知道它的孩子会是什么。
this.props.children
上的HighOrderComponent
属于ReactElement
类型,它是轻量级的,不会公开其方法。
到目前为止,唯一的解决方案是传递MyCanvasComponent
一个回调函数,它将自动发送一个回调函数并保存一个引用,但这很乏味,而且根据React 0.13 release notes
ref ref order稍微改变,以便在调用componentDidMount方法后立即获得组件的引用;只有当您的组件在componentDidMount中调用父组件的回调时,才应观察到此更改,这是一种反模式,无论如何都应该避免