React setState 不会在 GET 请求上更新,有时会起作用

时间:2021-01-30 21:03:44

标签: javascript reactjs api axios state

嗨,我正在尝试在 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。

0 个答案:

没有答案