A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object

女生的网名这么多〃 提交于 2019-11-29 13:34:37

The problem is that you have multiple statements in render and hence you need to surround that within () See the below snippet. Also the ( must be on the same line as return otherwise it will be treated a return only which is basically returning nothing.

class Pokemon extends React.Component {
  render() {
    var content = <div></div>
    return (
      <div className="pokemon--spacies">
        <div className="pokemon--spacies--container">
          <div className="pokemon--spacies--sprite">
            {content}
          </div>
          <div className="pokemon--spacies--name"> Hello</div>
        </div>
      </div>
    )
  }
}
ReactDOM.render(<Pokemon/>, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script>
<div id="app"></div>

Problem is in the return statement in Pokemon component, Because when you use:

return
   <div>
     ...
   </div>

It will be treated as:

return ;    //Automatic semicolon insertion

<div>
   ...
</div>

And that means you are not returning a valid element.

Check this answer for more details about Automatic Semicolon Insertion.

Solutions:

Wither wrap all the elements by () like this:

return (
 ....
)

or put the div in the same line of return, like this:

return <div>
   ...
       </div>

Use this part it will work:

class Pokemon extends React.Component {
  render() {
    const {pokemon, id} = this.props;
    return(
      <div className="pokemon--spacies">
        <div className="pokemon--spacies--container">
          <div className="pokemon--spacies--sprite">
            <img src={`/public/sprites/${id}.png`} />
          </div>
          <div className="pokemon--spacies--name"> {pokemon.name }</div>
        </div>
      </div>);
  }
}

This error is because of the way that you are giving value to "content"

When you are setting a value some kind of "html" as a value, you have to use this syntax:

content = (<div/>);

try it and let me know if it works!

good luck!

When you are using ES6 syntax's make sure you do the following

const App = ()=> (
  <div>
        <p>Adam</p>
        <p>Alex</p>
  </div>
)

Here the "()" is important and it says the bracketed is the jsx returned

If you are having a single line return then you can do this

const App = ()=> <h1>Hello</h1>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!