我只是试图渲染从我的后端获得的项目列表,但得到这个错误,指示它是未定义的。然而,当我检查控制台日志时,我可以看到组件的状态在数组中肯定有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) [{…}, {…}, {…}, {…}, {…}]
你知道为什么它会这样说吗。state。pubsubtopics是未定义的?
7条答案
按热度按时间yws3nbqq1#
检查指定行号代码中使用的所有括号。例如:
在我的例子中,这是抛出错误-
当我纠正这个错误的时候
这对我来说很好。
请检查这是否解决了您的问题。
kupeojn62#
如果您最近更新了您的MacOS,如果这个错误突然出现,这一定是因为MacOS Monterey没有列在操作系统列表中。
将这一行添加到index.js的顶部,然后此错误将得到修复。
wribegjk3#
你不能在一个数组上的
for..of
迭代中销毁,因为你试图迭代的东西是不可销毁的。你要做的是使用
this.state.pubsubtopics.entries()
,它返回一个键值对数组。下面是一个例子:e4eetjau4#
在我的例子中,错误的发生仅仅是因为我迭代的数组的值是
undefined
。rqqzpn5f5#
在我的例子中,我使用了数组反结构语法,其中当使用useQuery钩子时,返回输出是一个对象。
错误:
const [数据,错误,正在加载] = useQuery(GET_LOCATIONS);
右:
const {数据,错误,正在加载} = useQuery(GET_LOCATIONS);
piok6c0g6#
在我的例子中,我使用useEffect代替useState。
错误:
const [toggle,setToggle] = useEffect(false);
右:
const [toggle,setToggle] =useState(false);
vmjh9lq97#
添加此行代码和index.js的末尾
然后确保导入它,或者如果它被注解了,取消注解导入代码,它就会工作。