我想在 KonvaJs 的帮助下渲染一组 React 组件,而无需确切知道我在特定时刻绘制了哪个对象。更具体地说,这是我的代码:
我要渲染的 React 组件之一,wall.js:
class CWall extends React.Component {
render() {
return (
<React.Fragment>
<Rect /*some props*/></Rect>
<Transformer /*some props*/></Transformer>
</React.Fragment>
)
}
}
在另一个组件中,我在单击按钮时创建 CWall,planmenu.js:
class PlanMenu extends React.Component {
render() {
...
return (
...
<button type="button"
onClick={() => { addObject(
new CWall({
x: 100,
y: 100,
length: 200
}))}}>Wall
</button>
)
}
}
创建的对象被传递给应该显示它们的组件planbuilder.js:
import CWall from './objects/wall'
class PlanBuilder extends React.Component {
render() {
const { objects } = this.props
return (
<Stage>
<Layer>
{
objects.map(function(object) {
var ObjectType = object.constructor.name;
/* the following line gives an error to me */
return <ObjectType {...object.props} key={object.id} />;
}, this)
}
</Layer>
</Stage>
);
}
}
指定的行会引发错误:
konva 没有 CWall 类型的节点
但是,如果我直接渲染一个 CWall,我会按预期将它显示在屏幕上。在我看来,这似乎是 konva 能够渲染 CWall 对象的证据:
class PlanBuilder extends React.Component {
render() {
const { objects } = this.props
return (
<Stage>
<Layer>
<CWall x={100} y={100} length={200} />
</Layer>
</Stage>
);
}
}
所以我的问题是:在不知道它们的确切类型的情况下渲染对象的正确方法是什么?先感谢您。