【发布时间】:2020-10-14 18:04:51
【问题描述】:
我是编程世界和 reactjs 的新手。
我创建了一个反应应用程序。在我的主页组件中,它的目的是从服务器获取数据,然后将这些数据传递给相应的组件。
我使用 jsonplaceholder 作为我在代码框中显示的假 api。 https://codesandbox.io/s/intelligent-antonelli-ju56k
当我 console.log 数据时,我得到 2 个结果:
[]
[]
-> actual data get back
-> actual data get back
如何防止那些空取?处理这个问题的最佳方法是什么?
这是我的 jsx 代码:
import React, { Component } from "react";
import "./Homepage.css";
import Hero from "../components/Hero/Hero";
import ImageGallery from "../components/ImageGallery/ImageGallery";
import Axios from "axios";
export class Homepage extends Component {
constructor(props) {
super(props);
this.state = {
data: []
};
}
async componentDidMount() {
try {
await Axios.get("https://jsonplaceholder.typicode.com/todos")
.then((res) => {
this.setState({ data: res.data });
})
.catch((error) => {
alert(error);
});
} catch (error) {
alert(error);
}
}
render() {
const data = this.state;
console.log(data, "hi");
return (
<>
<Hero jsondata={data} />
<ImageGallery jsondata={data} />
</>
);
}
}
export default Homepage;
【问题讨论】:
-
如果您的目标是在未获取数据之前不渲染组件,那么您应该使用条件渲染。例如仅当数据存在时才呈现组件。
-
感谢您的建议。在条件渲染之后,我修改了代码框中的代码。 [codesandbox.io/s/intelligent-antonelli-ju56k]。但发生了另一个问题。我的子组件在从父组件传递后收到未定义。这样传递数据是否正确?
-
这是因为您没有使用正确的状态变量。我可以看到三种不同的状态来保持从 api 获取的数据。在 Axios 调用后,获取的数据在
aftherFetchingData中设置,渲染使用jsonData并在构造函数中使用data初始化状态。请在整个组件中保持相同。