我试图用axios POST调用返回的信息更新状态。我说TypeError: Cannot read property 'setState' of undefined
时遇到错误。在我看来,this
在API响应中不可用。
submitData= () => {
axios.post("url", this.props.data)
.then(function (result) {
console.log(result,'success');
this.setState({
...this.state,
id: result.data.id
})
})
.catch(function (err) {
console.log(err, 'fail');
});
}
我可以控制台日志result.data.id
,它是正确的ID。我正在所有客户端上执行此操作,并且我不想构建服务器或使用reducer。
答案 0 :(得分:1)
在回调中使用箭头函数,如下所示:
submitData= () => {
axios.post("url", this.props.data)
.then((result) => {
console.log(result,'success');
this.setState({
...this.state,
id: result.data.id
})
})
.catch(function (err) {
console.log(err, 'fail');
});
}
答案 1 :(得分:1)
您还可以使用async / await语法并将数据作为参数传递,以提高灵活性/可重用性。试试:
submitData = async (data) => {
try {
const result = await axios.post('url', data);
console.log('Success', result);
const { id } = result.data;
this.setState({
...this.state,
id,
});
} catch (err) {
console.log('Failure', err);
}
}
答案 2 :(得分:0)
尝试将.then
设为绑定this
的匿名函数。
submitData= () => {
axios.post("url", this.props.data)
.then((result) => {
console.log(result,'success');
this.setState({
...this.state,
id: result.data.id
})
})
.catch((err) => {
console.log(err, 'fail');
});
}
答案 3 :(得分:0)
在回调函数this
中将是未定义的(这就是js中this
的工作方式)。
如果您想轻松修复,只需使用箭头功能
submitData= () => {
axios.post("url", this.props.data)
.then(result => {
console.log(result,'success');
this.setState({
...this.state,
id: result.data.id
})
})
.catch(function (err) {
console.log(err, 'fail');
});
}
详细了解this
https://hackernoon.com/javascript-es6-arrow-functions-and-lexical-this-f2a3e2a5e8c4