【发布时间】:2017-08-21 03:37:58
【问题描述】:
我正在使用组件实现一些画布渲染。我有以下组件,它尝试将画布布局到页面,并让 Stage 组件中的子组件绘制到其上下文。
我需要一个对我的Renderer 组件正在呈现的画布元素的引用。所以我在 JSX 中请求 ref,并在我得到它时将它设置在我的组件上。我也在使用 React 上下文,以便所有子组件都可以访问此画布引用。我遇到的问题是,似乎getChildContext 在分配画布引用之前被调用,因此所有子组件都访问未定义的画布并且没有完成绘图。
export default class Renderer extends React.Component {
static childContextTypes = {
canvas: PropTypes.object
};
getChildContext() {
console.log("get child context")
return { canvas: this.canvas };
}
render() {
return (
<div className="CanvasHolder" key={0}>
<canvas className="MainCanvas" ref= {
canvas => {
this.canvas = canvas
console.log("got ref");
}
} />
<Stage />
</div>
)
}
}
【问题讨论】:
-
我还没有遇到这个问题,但我会尽力提供帮助。看起来
context是在ref属性之前设置的。一种解决方法是在ref函数内执行setState,以便组件再次呈现,这次使用正确的引用。相关问题:stackoverflow.com/questions/38864033/… -
我试过了,它导致了一个无限循环,因为 setState 重新触发了渲染调用,而渲染调用是我设置 ref 的地方。