javascript - React Setstate 在 JSON 化后使我的状态项未定义

标签 javascript reactjs fetch state

我正在尝试为自己制作一份锻炼日志,并作为 React 和 Node.js 的培训。我有自己的 API,其中包含许多功能,其中包括一个名为“/get-workouts”的 API,顾名思义,它是从数据库获取锻炼数据。

这是 API

app.get('/get-workouts', (req, res) => {
db('workoutlogger').select('*')
.limit(3)
.from('workouts')
.then(workouts => {
    if(workouts.length) {
        console.log(workouts);
        res.status(200).json(workouts);
    } else {
        res.status(400).send('No workouts found');
    }
})
.catch(err => {
    console.log(err);
    res.status(404).send('Error getting workouts')
   })
})

这是我的前端:

constructor(props) {
    super(props)
    this.state = {
        workoutList: {}
    }
}

getWorkouts = () => {
    fetch('http://localhost:3001/get-workouts')
    .then(workouts => {
        workouts.json();
    })
    .then(workoutList => {
        this.setState({workoutList})
    })
    .catch(err => console.log('There was an error getting workouts', err))
}

componentDidMount() {
    this.getWorkouts();
}

如果我在获取的第一个 .then() 中 console.log“锻炼”。我的 API 清楚地记录了我登录的最后 3 个锻炼的列表,最初, this.state.workoutList 是一个对象。但是,一旦 set.state 将锻炼列表设置为我的锻炼列表,它就会记录为未定义,并且我无法显示它。问题从何而来?

最佳答案

您需要在连续的 .then 之间传递值,它们不是隐式传递的。一个 .then 的返回值成为下一个的参数。所以这样做:

.then(workouts => workouts.json())
.then(workoutList => {
    this.setState({workoutList})
})

删除大括号意味着它隐式返回 workouts.json(),它将成为下一个 .then 中的 workoutList 参数

关于javascript - React Setstate 在 JSON 化后使我的状态项未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60535858/

相关文章:

javascript - Angular JS Android 应用程序默认参数的意外标记

javascript - Echart以特定方式配置饼图例

node.js - 从多页面应用程序进行身份验证后,如何在初始下载期间将 JWT token 加载到 React?

php - 无法使用 PDO 的 fetch 或 fetchAll 函数获取任何数据

asp.net - 在 JavaScript 中计算时间跨度

javascript - Chrome 的脚本内存优化

javascript - 如何使用 jQuery 的 Promise 使函数不嵌套

reactjs - 如何在 react-quill 中注册对齐样式

events - 从 zoho crm 中的事件表获取数据

javascript - 在 componentWillMount 中调度时无限循环