Javascript 拉威尔+;反应:this.state.tasks.map不是一个函数
我无法迭代从伪API get端点进入状态的项: 这是我的整个组件:Javascript 拉威尔+;反应:this.state.tasks.map不是一个函数,javascript,reactjs,laravel,Javascript,Reactjs,Laravel,我无法迭代从伪API get端点进入状态的项: 这是我的整个组件: import React, {Component} from 'react'; import ReactDOM from 'react-dom'; class TaskList extends Component { constructor() { super(); this.state = { tasks: [], // I set the empty sta
import React, {Component} from 'react';
import ReactDOM from 'react-dom';
class TaskList extends Component {
constructor() {
super();
this.state = {
tasks: [], // I set the empty state for now
}
}
componentDidMount() {
fetch('/api/tasks') // I fetch the data
.then(response =>{
return response.json();
})
.then(tasks=>{
this.setState({tasks}); // I put the data into the state
});
}
renderTasks() {
return this.state.tasks.map(task => { // Here I want to iterate over the state and it fails
return (
<li>{task.title}</li>
);
})
}
render() {
return(
<ul>
{this.renderTasks()}
</ul>
);
}
}
export default TaskList;
if (document.getElementById('app')) {
ReactDOM.render(<TaskList/>, document.getElementById('app'));
}
import React,{Component}来自'React';
从“react dom”导入react dom;
类任务列表扩展组件{
构造函数(){
超级();
此.state={
任务:[],//我现在设置为空状态
}
}
componentDidMount(){
fetch('/api/tasks')//我获取数据
。然后(响应=>{
返回response.json();
})
。然后(任务=>{
this.setState({tasks});//我将数据放入状态
});
}
renderTasks(){
返回this.state.tasks.map(task=>{//这里我想迭代状态,但它失败了
返回(
{task.title}
);
})
}
render(){
返回(
{this.renderTasks()}
);
}
}
导出默认任务列表;
if(document.getElementById('app')){
ReactDOM.render(,document.getElementById('app'));
}
函数map
未看到数据。为什么?
app.js:57174未捕获类型错误:this.state.tasks.map不是
作用
我可以在renderTasks()
中控制台logconsole.log(this.state)
并获得:
您尝试在保存数据数组的对象上进行映射。您应该映射到tasks对象内的数据数组:)
renderTasks(){
const{tasks:{data}}=this.state;
return([]| | data).map(task=>{//这里我想迭代状态,但失败了
返回(
{task.title}
);
})
}
您尝试映射到保存数据数组的对象上。您应该映射到tasks对象内的数据数组:)
renderTasks(){
const{tasks:{data}}=this.state;
return([]| | data).map(task=>{//这里我想迭代状态,但失败了
返回(
{task.title}
);
})
}
映射功能只能应用于数组而不能应用于对象,如图所示任务是对象,但任务。数据是数组。应按如下方式设置状态:
.then(tasks=>{
this.setState({tasks: tasks.data}); // putt array rather than object
});
这也可以通过以下方式实现(如果未采用上述解决方案):
映射功能只能应用于数组而不能应用于对象,如图所示tasks
是对象,但tasks。数据
是数组。应按如下方式设置状态:
.then(tasks=>{
this.setState({tasks: tasks.data}); // putt array rather than object
});
这也可以通过以下方式实现(如果未采用上述解决方案):
请尝试以下操作:
renderTasks() {
if (this.state.tasks.hasOwnProperty('data')) {
return this.state.tasks.data.map(task => { // Here I want to iterate over the state and it fails
return (
<li>{task.title}</li>
);
})
} else {
return (null);
}
}
renderTasks(){
if(this.state.tasks.hasOwnProperty('data')){
返回this.state.tasks.data.map(task=>{//这里我想迭代状态,但它失败了
返回(
{task.title}
);
})
}否则{
返回(空);
}
}
当组件第一次呈现时,使用this.state.tasks.data.map
将失败,因为数据不是this.state.tasks
中的键,因为只有在DidMount()之后才会触发获取
这样做的目的是,如果this.state.tasks具有数据键,则通过该数据映射,否则返回null。请尝试以下操作:
renderTasks() {
if (this.state.tasks.hasOwnProperty('data')) {
return this.state.tasks.data.map(task => { // Here I want to iterate over the state and it fails
return (
<li>{task.title}</li>
);
})
} else {
return (null);
}
}
renderTasks(){
if(this.state.tasks.hasOwnProperty('data')){
返回this.state.tasks.data.map(task=>{//这里我想迭代状态,但它失败了
返回(
{task.title}
);
})
}否则{
返回(空);
}
}
当组件第一次呈现时,使用this.state.tasks.data.map
将失败,因为数据不是this.state.tasks
中的键,因为只有在DidMount()之后才会触发获取
这样做的目的是,如果this.state.tasks具有数据键,则通过该数据映射,否则返回null。您是否忘记解析JSON?我的tl看起来像是在试图映射一个字符串?这是你的答案,你不能在对象上使用map(),我不能在数组上添加数据返回这个.state.tasks.data.map(task=>{
,但这不起作用。我是瞎了吗?我遗漏了一些东西…是的,你应该只在任务不是空的情况下尝试映射。)现在它会在第一次中断,因为数据键不存在于空任务数组中。我编辑了我的答案,所以现在如果数据未定义,它将在第一次映射到空数组:)你忘记解析JSON了吗?我看起来好像它试图映射到字符串上?这是你的答案,你不能使用map()在对象上我添加数据以处理数组返回此.state.tasks.data.map(task=>{
但这也不起作用。我是瞎子吗?我缺少一些东西…是的,只有在任务不是空的情况下,你才应该尝试映射。)现在它会第一次停止,因为空任务数组中不存在数据键。我编辑了我的答案,所以现在如果数据未定义,它将在第一次映射到空数组:)这就成功了。我应该从任务.data
设置状态。然后我可以通过映射返回这个.state.tasks.map(task=>
。该死的JS框架!讨厌它们。谢谢你Umair。这就成功了。我应该从tasks.data
设置状态。然后我可以通过映射返回这个。state.tasks.map(task=>
。该死的JS框架!讨厌它们。谢谢Umair)。