【发布时间】:2021-05-28 06:14:23
【问题描述】:
我发现了一个非常 interesting hook,我想在 useEffect 中使用这个钩子(它违反了规则)
const useFetch = (url, options) => {
const [response, setResponse] = React.useState(null);
const [error, setError] = React.useState(null);
React.useEffect(() => {
const fetchData = async () => {
try {
const res = await fetch(url, options);
const json = await res.json();
setResponse(json);
} catch (error) {
setError(error);
}
};
fetchData();
}, []);
return { response, error };
};
function App() {
const res = useFetch("example.com", {});
useEffect(() => {
// use the hook and make a secondary request
}, [])
为了支持这一点,我需要进行哪些修改? AFAIK 钩子不能在 useEffect 中调用
可能是一个新的参数,将 setUrl 并再次运行它?
【问题讨论】:
-
是否有问题或问题隐藏在某个地方?你在问什么? React 钩子不能在回调中调用,也不能有条件地调用。 Rules of Hooks.
-
第一个请求完成后是否需要进行第二次请求?还有条件在这里发挥作用
-
我编辑了问题以简化。因为我唯一需要做的就是在useEffect中使用那个钩子。不需要任何条件。
-
你可以在你的
useEffect中使用res就好了,只要确保你将它添加为钩子的依赖项。 -
如果你只想制作。在初始渲染后获取请求,自定义钩子已经通过获取 useEffect 中的数据为您执行此操作,我认为您的用例是否有所不同,并且需要对您想要实现的目标进行更多说明
标签: javascript reactjs react-hooks