为什么或何时应该在 React 的自定义 Hook 中使用状态?

Why or when should I use state within a custom Hook in React?

我正在学习 React 中的自定义 Hooks。正如您在 https://www.w3schools.com/react/react_customhooks.asp.

中看到的,我采用了以下典型示例 (useFetch)
import { useState, useEffect } from "react";
const useFetch = (url) => {
const [data, setData] = useState(null); /* <--- Why use this? */
  useEffect(() => {
    fetch(url).then((res) => res.json()).then((data) => setData(data));
  }, [url]);
  return [data];
};
export default useFetch;

我很困惑为什么应该在该 Hook 内部或通常在自定义 Hook 中使用状态。我总是将状态管理与组件联系起来,而不是与钩子联系起来。这也许是我的困惑。

难道仅仅通过返回一个数据变量就可以做到吗?

与普通函数不同,自定义钩子封装了 React 状态。这意味着钩子可以利用 React 自己的钩子并执行自定义逻辑。从这个意义上说,它很抽象。

对于您的情况,您想要 return 数据的 state,而不仅仅是 data 本身,因为状态与 useEffect 相关联。这意味着 fetch 将仅 运行 并且扩展仅在其依赖项 ([url]) 更改时更新 data

如果它是一个正常函数,只是 return 从获取的数据中获取数据,那么每次组件使用挂钩 re-renders 时,您都会发送一个请求。这就是为什么您使用 useStateuseEffect 来确保它只在应该更新的时候更新。