【发布时间】:2021-04-30 21:10:31
【问题描述】:
我正在尝试学习 React 钩子。我正在创建一个利用 NY Times api 的简单新闻应用程序。
当我将依赖项留空时,不会加载任何内容,当我使用数据作为依赖项时,它会进入无限循环。
当我使用 isLoading 时,它可以工作,但随后我收到错误“localhost/:1 Unchecked runtime.lastError:消息端口在收到响应之前关闭。”和“localhost/:1 错误处理响应:TypeError: Cannot read property 'level' of undefined”
main.js
import React, { useEffect, useState } from "react";
import { nyTimesApi } from "../services/Api";
const Main = () => {
const [isLoading, setIsLoading] = useState(true);
const [data, setData] = useState([]);
const fetchData = async () => {
const result = await nyTimesApi();
setData(result);
setIsLoading(false);
console.log(data.results);
};
useEffect(() => {
fetchData();
}, [isLoading]);
return <div className="main">work</div>;
};
export default Main;
当我使用 isLoading 时,我还在终端中收到警告说“React Hook useEffect 缺少依赖项:'fetchData'。要么包含它,要么删除依赖数组 react-hooks/exhaustive-deps”
我做错了什么?
【问题讨论】:
-
您的代码完全没问题。能否分享更多源代码或在 CodeSanbox 中重现?
-
你不能在下一行
console.log状态改变,状态改变是异步的。在函数主体中记录状态以查看最新的状态值。你的效果实际上可以只是useEffect(fetchData, []);,所以它在挂载上运行一次 -
如果您希望函数仅在初始加载时运行,则依赖项数组应该为空。我很确定你可以忽略依赖数组中需要“fetchData”的警告。
标签: reactjs react-hooks use-effect