Axios响应在嵌套的React组件中不可用

时间:2016-12-27 14:15:45

标签: reactjs axios

感谢阅读。我知道这似乎过于简化了,但我真的很难过为什么会发生这种情况。我使用axios调用API,得到答案,然后通过props将答案传递给下面的组件。当我执行以下代码时,控制台会显示该对象 - 填充了server / api数据。

user1  22153 129551  0 15:56 pts/3    00:00:00 /bin/sh ./test.sh
user1  22155  22153  0 15:56 pts/3    00:00:00 /bin/sh ./test.sh

如果我添加一个字段:console.log(this.props.personData.first_name)我得到一个错误,即personData为null,无法访问其成员。认为这很奇怪,所以再次进行测试并进一步困扰自己:

如果我在console.log行中在Chrome中设置断点,而是将this.props.personData键入控制台,我会得到null。如果我然后跳过console.log行,它输出null。但是,如果我删除断点,那同一行代码将输出一个数据填充对象。

任何人都可以解释这种行为吗?

2 个答案:

答案 0 :(得分:3)

假设你的组件被渲染,无论Axios是否还没有返回,personData道具将是null(或者你在父级状态下构建它的任何东西)直到Axios返回异步调用

您可以在数据返回后有条件地呈现Player组件,或者不要引用数据属性,直到您知道它不为空。

这是因为Player组件最初将在父级安装时呈现,但是,Axios API调用将是异步的,因此数据不可用。

此外,如果Player组件在不检查它们是否存在的情况下呈现personData的属性,它将抛出错误并中断渲染周期。

关于断点/日志记录差异的问题,因为控制台日志被映射到道具的内存位置,所以最终它被设置并将显示在日志中。但是,如果在最初渲染时通过断点进行检查,则值为null,并且会抛出上述错误。

答案 1 :(得分:0)

如果您使用redux或flux将数据传递给组件。