我正在尝试显示从维基百科API的响应中获取的结果列表。
如果响应未显示任何列表,则应显示不同的消息。我正在尝试进行条件渲染。
以下是代码:
getData(e) {
e.preventDefault();
var search = e.target.search.value;
var wikipediaEndPoint = "https://en.wikipedia.org/w/api.php?format=json&origin=*&action=query&generator=search&gsrnamespace=0&prop=pageimages|extracts&pilimit=max&exintro&explaintext&exsentences=1&exlimit=max&gsrsearch="+search;
var wikipediaUrl = "https://en.wikipedia.org/?curid=";
fetch(wikipediaEndPoint)
.then(data => {
return data.json();
}).then(data => {
var objectList = (data.hasOwnProperty("query")) ? data.query.pages : "";
let resultList;
if(objectList !== ""){
resultList = Object.keys(objectList).map(function(key, index) {
return (
<div className="item" key={objectList[key].pageid}>
<a href={wikipediaUrl+objectList[key].pageid}>
<h1>{objectList[key].title}</h1>
<p>{objectList[key].extract}</p>
</a>
</div>
)
});
} else {
resultList = (function() {
return (
<div className="item" key={1}>
<p>No results!</p>
</div>
)
});
}
this.setState({search: resultList});
})
}
结果如下所示:<div className="items">{this.state.search}</div>
当搜索字段关键字找到某些结果时,它可以正常工作,但是,相反的情况下,控制台会返回错误(或警告):
Warning: Functions are not valid as a React child. This may happen if
you return a Component instead of <Component /> from render. Or maybe
you meant to call this function rather than return it.
错误在哪里?我正在以正确的方式进行条件渲染吗?
由于
答案 0 :(得分:12)
resultList = (function() {
return (
<div className="item" key={1}>
<p>No results!</p>
</div>
)
});
为什么要设置功能?只需设置<div...
-
resultList = (
<div className="item">
<p>No results!</p>
</div>
)
修改
为了真正使用一个函数(不知道为什么),代码必须有点不同 -
const Foo = (function() {
return (
<div className="item" key={1}>
<p>No results!</p>
</div>
)
});
resultList = (<Foo />)
编辑2 -
上面的编辑有效,因为React组件不必是构造函数/类,它们也可以是一个简单的函数,它将props作为参数并返回JSX。我认为这种类型的组件有点受限,但它可以工作。
答案 1 :(得分:4)
您在resultList
时将objectList === ""
设置为某个功能。要么直接返回<div>
,要么将该函数用作IIFE:
resultList = (function() {
return (
<div className="item" key={1}>
<p>No results!</p>
</div>
)
})(); // note the parens here, which call the function