嗨,我正在尝试在 create-react-app 中创建多个股票行情卡。组件结构如下:
<LandingPage>
<Stock tick="GE">
<Stock tick="AMD">
<Stock tick="TSLA">
</LandingPage>
现在我正在对股票 API 进行 axios GET 调用。我想将来自 GET 调用的响应添加到状态,以便我可以在整个组件中检索。
现在设置的 Stock 组件是:
const Stocks = ({ tick }) => {
const apiKey = process.env.REACT_APP_POLYGON_KEY;
const [color, setColor] = useState("white");
const [show, setShow] = useState(false);
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [message, setMessage] = useState(null);
const [opacity, setOpacity] = useState("1");
const [prevData, setPrevData] = useState(null);
const previousCloseData = async () => {
try {
setLoading(true);
const res = await axios.get(
`https://api.polygon.io/v2/aggs/ticker/${tick}/prev?unadjusted=true&apiKey=${apiKey}`
);
setLoading(false);
if (res) {
setPrevData(res);
}
} catch (error) {
setMessage(error);
}
};
useEffect(() => {
previousCloseData();
console.log(prevData);
}, []);
return ()
export default Stocks
我从 API 返回的响应如下所示:
{
"ticker": "AAPL",
"status": "OK",
"queryCount": 1,
"resultsCount": 1,
"adjusted": true,
"results": [
{
"T": "AAPL",
"v": 131704427,
"vw": 116.3058,
"o": 115.55,
"c": 115.97,
"h": 117.59,
"l": 114.13,
"t": 1605042000000
}
],
"request_id": "6a7e466379af0a71039d60cc78e72282"
}
我的问题是 setPrevData(res) 为什么不起作用? 有时在我进行随机刷新时会起作用。如果我向 useEffect 添加任何依赖项,axios GET 调用将在无限循环中发生。我只是想将响应存储在一个状态中。但是,无论我尝试什么,我都会返回空值。我想避免使用 Redux 或 Context,因为这是我发出的唯一 API 请求。任何帮助或信息将不胜感激。谢谢。
*澄清 console.log(prevData) 在 useEffect 中也返回 null。