itg*_*234 8 reactive-programming reactjs
我是ReactJS的新手,我遇到了问题.我无法解决它.似乎一切都很好,但仍然控制台让我:
必须返回有效的React元素(或null).您可能已返回undefined,数组或其他一些无效对象.
这是我的代码:
import React from 'react';
import ReactDOM from 'react-dom';
import fetch from 'isomorphic-fetch';
import Pokemon from './Pokemon';
class PokemonList extends React.Component {
constructor(props) {
super(props);
this.state = {
species: [],
fetched: false,
loading: false,
};
}
componentWillMount(){
this.setState({
loading : true
});
fetch('http://pokeapi.co/api/v2/pokemon?limit=151').then(res => res.json())
.then(res =>{
this.setState({
species : res.results,
loading : true,
fetched : true
});
});
}
render() {
const {fetched, loading, species} = this.state;
let content;
//This if seems to be the problem
if(fetched){
content =
<div className="pokemon--species--list">
{species.map((pokemon,index) => <Pokemon key={pokemon.name} id={index+1} pokemon={pokemon}/>)}
</div>;
}
else if(loading && !fetched){
content = <p> Loading ...</p>;
}
else{
content = <div/>;
}
return (
<div>
{content}
</div>
);
}
}
export default PokemonList;
Run Code Online (Sandbox Code Playgroud)
Pokemon.js
import React from 'react';
import ReactDOM from 'react-dom';
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>;
}
}
export default Pokemon;
Run Code Online (Sandbox Code Playgroud)
感谢帮助!
问题出现在Pokemon组件的return语句中,因为当你使用时:
return
<div>
...
</div>
Run Code Online (Sandbox Code Playgroud)
它将被视为:
return ; //Automatic semicolon insertion
<div>
...
</div>
Run Code Online (Sandbox Code Playgroud)
这意味着您没有返回有效元素.
有关自动分号插入的更多详细信息,请查看此答案.
解决方案:
()像这样包装所有元素:
return (
....
)
Run Code Online (Sandbox Code Playgroud)
或者将div放在同一行的回报中,如下所示:
return <div>
...
</div>
Run Code Online (Sandbox Code Playgroud)
使用这部分它将起作用:
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>);
}
}
Run Code Online (Sandbox Code Playgroud)
问题在于您有多个语句render,因此需要将其括在内部。()请参见下面的代码片段。另外,(必须与return其他项目在同一行上,否则它将被视为return仅基本不返回任何内容的行。
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'));Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12694 次 |
| 最近记录: |