Reputation: 2893
Error: React.createElement: type is invalid expected a string or a class/function but got: . Did you accidentally export a JSX literal instead of a component?
class TestDynamic extends React.Component {
getSpan(value) {
return (<span>Spanned {value}</span>)
}
renderDynamicComponent() {
const Test = this.getSpan(1)
return (<div> <Test /> </span>)
}
render() {
return (<div>{this.renderDynamicComponent() }</span>)
}
}
I tried with return (<div>{ Test }</span>)
it displays nothing
Upvotes: 1
Views: 291
Reputation: 282030
Instead of declaring Test as a plain class, extend it from React.Component
and render it like <Test />
. Also render getSpan
as {Test1}
and specify proper closing and opening tags
class TestDynamic extends React.Component{
getSpan(value) {
return (<span>Spanned {value}</span>)
}
renderDynamicComponent() {
const Test = this.getSpan(1)
return (<div> {Test}</div>)
}
render() {
return (<div>{this.renderDynamicComponent() }</div>)
}
}
ReactDOM.render(<TestDynamic />, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="app"/>
Upvotes: 2
Reputation: 1195
Please visit your return statement in render. it should not be span. closing div tag is missing. looks like some typo.
import React from 'react';
class TestDynamic extends React.Component {
getSpan(value) {
return (<span>Spanned {value}</span>)
}
renderDynamicComponent() {
const Test = this.getSpan(1)
return (<div> <Test /> </span>)
}
render() {
return (<div>{this.renderDynamicComponent() }</div>)
}
}
Upvotes: 0