【发布时间】:2017-02-18 16:15:36
【问题描述】:
我在 React 中使用 Axios 进行了 AJAX 调用,我对如何处理响应有点困惑。
这是我的代码:
componentDidMount() {
axios.get('https://jsonplaceholder.typicode.com/users')
.then( res => {
const users = res.data
this.setState({ users });
});
}
render() {
console.log(this.state.users)
return (
<div>
{this.state.users.map( user => <p>{user.name}</p>)}
</div>
)
}
当我对结果进行 console.log 时,会返回两个值:
-
[]- 分配给初始状态的空数组 - 来自 API 的预期数组。
这大概可以解释为状态值在初始化时返回一次,然后再次使用 componentDidMount。
我的问题在于如何访问 this.state.users 值。显然,任何时候我访问它时,我都想要从 AJAX 响应返回的值,但是如果我尝试从数组中的第一个对象呈现 name 属性...
{this.state.users[0].name}
...它尝试访问[],因此没有返回任何内容。
但是,如果我尝试遍历数组元素...
{users.map( user => <p>user.name</p> )}
...它按预期返回值。
我不知道为什么它适用于第二个示例而不是第一个示例。当然,如果第一个尝试从初始状态值(空数组)中提取数据,那么当 mapping 到 this.state.users 时,它也将尝试通过空数组进行映射并且不返回任何内容,或者一个错误。
我显然没有完全理解这里的 React 渲染过程以及 componentDidMount 在组件生命周期中是如何工作的。尝试将响应值直接分配给状态我错了吗?
如果有人可以帮助解决这个问题,我们将不胜感激。
【问题讨论】:
标签: javascript arrays ajax reactjs state