javascript - React Setstate 在 JSON 化后使我的状态项未定义
问题描述
我正在尝试为自己制作锻炼日志,并作为 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
的 s 之间传递值,它们不会被隐式传递。一个的返回值.then
成为下一个的参数。所以这样做:
.then(workouts => workouts.json())
.then(workoutList => {
this.setState({workoutList})
})
删除花括号意味着它隐式返回workouts.json()
,然后它将成为workoutList
下一个参数.then
推荐阅读
- docx4j - 删除 CustomXml 文件 -docx4j
- c# - 下载文件导致用户退出
- javascript - 从 .onload() 函数访问值
- blazor-client-side - 组件如何在 Blazor 中实时通信?
- c++ - 如何从字符串中获取词向量?
- python - Colab 找不到 chromedriver 路径
- javascript - Sequelize 多对多添加功能不起作用
- performance - Chrome 开发工具中的性能选项卡显示偏移记录
- java - IntelliJ 不显示堆栈跟踪
- javascript - 如何将输入数据显示到 iframe 而不是新窗口?