【发布时间】:2018-02-17 10:02:25
【问题描述】:
我正在尝试使用 react 开发 Web 应用程序,但遇到了问题。 我的组件得到一个“现有组件名称”,我尝试在当前组件的渲染函数中渲染这个新组件。
我当前的组件渲染函数
render(){
let Xxx = null;
if( this.props.onHex ){
console.log( this.props.onHex );
Xxx = <this.props.onHex />
}
return(
<div className="myClass">
<div className="anotherClass">
{Xxx}
</div>
</div>
);
}
}
它对我不起作用,控制台日志返回新组件“Unit”的名称。当我用这个Xxx = <Unit /> 替换Xxx = <this.props.onHex /> 时,它可以工作并渲染单元的渲染函数。
看起来 react 无法将 <Unit/> 识别为组件。
我做错了什么请指教。
我的单位代码:
export default class Unit extends Component{
render(){
return(
<div>test</div>
);
}
}
更新:
当我使用const XxxName = Unit; Xxx = <XxxName />; 时,它对我有用,但我希望能够从字符串呈现组件(我从 json 得到这个字符串)。
我想我可以在这种情况下在文件中创建所有可能的组件,将它们加载到数组或其他东西中并通过字符串获取它们,但这不是可以忍受的东西单独的文件夹(每个组件的单独文件)这将是一半的解决方案。但我仍在寻找如何从字符串加载组件。
jsFiddle 有另一个类似的问题http://jsfiddle.net/dhjxu5oL/
更新 2: 我没有找到优雅的方式来实现我的目标(我不确定它是否存在),现在我正在为每个动态组件使用方法,希望有人会建议我提供更优雅的解决方案。检查它:React / JSX Dynamic Component Name
newExampleComponent() {
return <ExampleComponent />;
}
newComponent(type) {
return this["new" + type + "Component"]();
}
【问题讨论】:
-
this.props.onHex是字符串还是某种引用? -
您不能传递“组件名称”
<CurrentComponent onHex="Unit"/>并期望它选择您在其他地方拥有的组件构造函数。您需要像这样<CurrentComponent onHex={Unit}/>传递对 Unit 组件的引用 -
@Chris 这是一个字符串。
-
@YuryTarabanko 为什么不听起来对我来说不是那么糟糕,
<Unit />和<$unit />之间有什么不同,这条评论实际上让我想到了使用类似const Xxx = window[ this.props.onHex ]()的东西,因为当我使用const Xxx = Unit;有效。 -
"
和 之间有什么区别" 在这种情况下没有区别。但是如果你这样做 <unit/>,它将被取消为React.createElement('unit', null)而不是React.createElement(unit, null)。 “让我想到使用 const Xxx = window[ this.props.onHex ]() 之类的东西”这是个坏主意,因为您正在用组件污染全局范围。很有可能引入由名称冲突引起的细微错误。
标签: javascript reactjs