【发布时间】:2019-08-13 23:32:56
【问题描述】:
只是试图呈现从我的后端获得的项目列表,但收到此错误,表明它未定义。但是,当我检查控制台日志时,我可以看到组件的状态在数组中肯定有 5 个项目。
class PubSubTopics extends React.Component{
constructor(props){
super(props);
this.state = {
pubsubtopics: ['one', 'two', 'three'],
}
}
componentDidMount() {
this.callBackEndAPI()
.then(res =>
this.setState({pubsubtopics: res.express}))
.catch(err => console.log(err));
console.log('after setting state');
console.log(this.state.pubsubtopics);
}
callBackEndAPI = async () => {
const response = await fetch('/listtopics');
const body = await response.json();
if(response.status !== 200){
throw Error(body.message)
}
console.log('after API responded');
console.log(body.topics);
return body.topics;
}
render(){
const list = [];
for(const[index, value] of this.state.pubsubtopics){
list.push(<li key={index}>{value}</li>)
}
return(
<div>
<ul>
{list}
</ul>
<button onDoubleClick={this.handleClick}/>
</div>
)
}
}
控制台日志:
after setting state
index.js:21 (3) ["one", "two", "three"]
index.js:32 after API responded
index.js:33 (5) [{…}, {…}, {…}, {…}, {…}]
知道为什么说 this.state.pubsubtopics 是未定义的吗?
【问题讨论】:
-
“设置状态后”在
callBackEndAPI函数完成并设置状态之前记录。您可以复制/粘贴您收到的整个错误消息吗? -
TypeError: 无法读取未定义 PubSubTopics.render src/index.js:38 35 的属性“切片” 36 |渲染(){ 37 |常量列表 = []; > 38 | const pubsubtopics = this.state.pubsubtopics.slice(); | ^ 39 | for(const[index, value] of pubsubtopics.entries()){ 40 | list.push(
- {value}
) 41 | } -
在意识到后端的数组嵌套在一个键中后能够使其工作:this.setState({pubsubtopics: res.express.topics}))
标签: reactjs