【发布时间】:2019-11-15 16:51:29
【问题描述】:
我有一个页面需要显示多个微调器。每当数据到达时,都应该隐藏微调器。
。在示例中,我有子组件,其中我使用 settimeout 模拟了数据,就好像它来自后端一样。
我已将加载器提取为一个单独的组件,以便它作为所有项目的通用加载器。
通常,如果存在,API 会给我一个项目数组,如果不是一个空数组。
尝试了一些方法,但是 对于所有卡片,它都显示为未找到,然后被替换为内容
沙盒:https://codesandbox.io/embed/react-table-row-table-vdnfh?codemirror=1
import * as React from "react";
import { render } from "react-dom";
import "./styles.css";
import Card from "./Card";
class App extends React.Component<IProps, IState> {
constructor(props: any) {
super(props);
this.state = {
cardData1: undefined,
cardData2: undefined,
cardData3: undefined,
cardData4: undefined
};
}
componentDidMount() {
this.getGraphData();
}
getGraphData = () => {
this.setGraphData("graph1");
this.setGraphData("graph2");
this.setGraphData("graph3");
this.setGraphData("graph4");
};
setGraphData = (cardNumber: string) => {
//based on the attribute I set the corresponding card data
if (cardNumber === "graph1") {
setTimeout(() => {
this.setState({ cardData1: [1, 2, 3] });
}, 1000);
}
if (cardNumber === "graph2") {
setTimeout(() => {
this.setState({ cardData2: [3, 4, 5] });
}, 2000);
}
if (cardNumber === "graph3") {
setTimeout(() => {
this.setState({ cardData3: [6, 7, 8] });
}, 3000);
}
if (cardNumber === "graph4") {
setTimeout(() => {
this.setState({ cardData4: [] });
}, 4000);
}
};
render() {
let { cardData1, cardData2, cardData3, cardData4 } = this.state;
return (
<>
<Card
name="Card1"
data={this.state.cardData1}
spinnerFlag={cardData1 === undefined}
/>
<Card
name="Card3"
data={this.state.cardData2}
spinnerFlag={cardData2 === undefined}
/>
<Card
name="Card3"
data={this.state.cardData3}
spinnerFlag={cardData3 === undefined}
/>
<Card
name="Card4"
data={this.state.cardData4}
spinnerFlag={cardData4 === undefined}
/>
</>
);
}
}
【问题讨论】:
-
那么到底是什么不起作用?从您的描述和示例...看起来一切都按照您的描述进行。
-
您好,您能详细解释一下这个问题吗?你是说当数据到达时有一个框架显示没有数据的状态然后渲染数据?如果是这样,那很可能是实际卡片组件中的一个问题,我们需要看到这一点。也只是一个小的建议代码,也许尝试
!cardData而不是=== undefined -
同样不要挑剔,只是对您的代码明智的建议。尽量不要将变量设置为未定义。最好的做法是只为开发人员从未给出值的变量保留未定义。如果要设置空变量,请改用 null。让调试变得更容易。
-
@Viktor Garba 我要解决的问题是,我需要一个可以显示和隐藏加载器的微调器组件。我试图在沙箱中解决这个问题(请参阅问题中的链接)。使用我的代码,首先显示“找不到数据”,然后数据到达。相反,我需要的是在数据到达之前显示微调器,并且基于它我需要显示数据,或者如果没有数据存在,则应该显示“未找到数据”。我得到的数据要么是项目数组,要么是一个空数组,以防万一
-
@ageoff。我要解决的问题是,我需要一个可以显示和隐藏加载器的微调器组件。我试图在沙箱中解决这个问题(请参阅问题中的链接)。使用我的代码,首先显示“找不到数据”,然后数据到达。相反,我需要的是在数据到达之前显示微调器,并且基于它我需要显示数据,或者如果没有数据存在,则应该显示“未找到数据”。我得到的数据要么是项目数组,要么是一个空数组,以防没有数据
标签: javascript reactjs ecmascript-6 ecmascript-5 setstate