为了账号安全,请及时绑定邮箱和手机立即绑定

无法从 React 前端获取 express API

无法从 React 前端获取 express API

慕哥6287543 2022-05-26 16:50:04
我现在已经进入第三周尝试简单地从 Express API 获取 json 响应到 React 应用程序中。我已经尝试了至少 40 个小时的教程,但我仍然无法让它工作。出于绝望,我想把它贴在这里,我知道我会被处以私刑,因为这将是某种形式的重复,但我正在寻找一个人来解决这个问题,希望能帮助我理解我做错了什么。这是我从 React 调用它的最新尝试import React, { Component } from 'react';class App extends Component {   constructor(){       super();       this.state ={key: 0, title: ''};   }   componentDidMount() {          fetch('http://localhost:3001/')            .then(res => {                console.log(res);                return res.json()             })            .then(todos => {                 console.log(todos);                 this.setState({ todos })             });         }   render() {        return (            <div className="App">                <h1>todos</h1>                {this.state.todos.map(todo =>                <div key = {this.state.key} > title: {this.state.title} </div>              )}            </div>        );    }}export default App;这会产生一个错误:Uncaught TypeError: Cannot read property 'map' of undefined有人可以解释一下获取这种格式的数据的正确方法吗?
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

你需要在构造函数中初始化 todos


constructor(){

       super();

       this.state ={key: 0, title: '', todos: []};

   }


因为最初在调用 render 方法时,API 仍在进行中,当时todos是未定义的。


因此,当您尝试.map在未定义的情况下运行 a 时,它会崩溃。


查看完整回答
反对 回复 2022-05-26
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

我认为你混合了 state 和 todos 数组。在构造函数中初始化状态如下:


constructor(){

   super();

   this.state ={ todos: [key: 0, title: '']};

}

在渲染函数中:


render() {

        return (

            <div className="App">

                <h1>todos</h1>

                {this.state.todos.map(todo =>

                <div key = {todo.key} > title: {todo.title} </div>

              )}

            </div>

        );

    }


查看完整回答
反对 回复 2022-05-26
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

您todos将在初始运行render前未定义componentDidMount,因此您必须todos像这样使用空数组初始化


constructor(){

       super();

       this.state ={key: 0, title: '', todos: []};

   }


查看完整回答
反对 回复 2022-05-26
  • 3 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号