无法在 axios 回调中更正此问题 [重复]
Posted
技术标签:
【中文标题】无法在 axios 回调中更正此问题 [重复]【英文标题】:Cannot access correct this inside an axios callback [duplicate] 【发布时间】:2017-10-29 00:47:00 【问题描述】:有点放屁的atm。我设法编写了以下代码,它从 url 下载 JSON 并将其显示在屏幕上:
export default class Appextends React.Component
constructor(props)
super(props);
this.state =
data: [],
componentWillMount()
axios.get(//url//)
.then(function (response)
localStorage.setItem('data', JSON.stringify(response.data));
//this.setState(data: response.data); -- doesnt work
)
.catch(function (error)
console.log(error);
)
render()
let items = JSON.parse(localStorage.getItem('data'));
return (
<ul>
items.map(v => <li key=v.id>v.body</li>)
</ul>
)
;
但是...这很奇怪,因为如果我想将接收到的 json 存储在 state 对象中的数据中,但是当我尝试这样做时,它会说 state 变量实际上并不存在...
这是什么意思?既然是component WILL mount功能,状态还不存在,所以我无法将接收到的数据存储在那里?
有什么办法可以解决这个问题吗?非常感谢
P.S:实际解决方案可行,但在这种情况下使用本地存储的质量相当低。
有吗
【问题讨论】:
【参考方案1】:问题不在于状态不存在,而在于您没有为状态使用正确的上下文。
你需要bind
axios callback function
,否则里面的this
会引用它自己的上下文而不是react组件的上下文
axios.get(//url//)
.then( (response) =>
this.setState(data: response.data);
)
.catch( (error) =>
console.log(error);
)
在渲染中
render()
return (
<ul>
this.state.data.map(v => <li key=v.id>v.body</li>)
</ul>
)
;
【讨论】:
以上是关于无法在 axios 回调中更正此问题 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有任何 vue 库的情况下在 vue 回调中获取 http 响应标头(axios)
在设置选项内的 axios 响应回调中更新反应数据 - Vue 3
Bug解决了axios.get('...').then(),回调不执行的Bug