【发布时间】:2019-11-20 08:20:14
【问题描述】:
我在我的 react 项目中使用 axios-hooks。我有一个问题,每当我重新渲染组件时,都会调用后端,并且在开始时,同一个端点会被调用两次。 我以以下方式使用它:
import useMyHook from '../../hooks/useMyHook ';
export default function MyComponent() {
const { getData } = useMyHook (category);
...
<Button onClick={getData}...
}
调用**getData刷新数据(所以这里再次调用后端是正常的)
export default function useMyHook(category) {
const { language, contextData, dispatch } = useAppContext();
const config = {... url, headers, params ...};
const opts = { manual: false };
const [{ data: myData, loading, error }, reFetch] = useAxios(config, opts);
useEffect(() => {
if (_.isEmpty(contextData) && !_.isEmpty(myData)) {
dispatch({ type: DATA_LOADED, payload: myData});
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [myData]);
const getData = () => {
dispatch({ type: DATA_RESET});
reFetch();
};
return { loading, error, getData};
}
我的实现有问题吗?
PS。我看到useAxios 有
useAxios(){...}, [stringifiedConfig]) and stringifiedConfig=JSON.stringify(config)
据我了解,如果配置没有改变,它不应该重新调用后端。
【问题讨论】:
-
BE 是什么意思?
-
@SuleymanSah 后端
-
@FarukT 谢谢,我会编辑问题:)
-
你的
useAxios钩子没有被“保护”。每次 react 重新渲染MyComponent,你的自定义钩子useMyHook都会被调用。然后在那个钩子里你总是做一个 axios 调用。您需要定义何时调用useAxios挂钩以及何时不调用的条件。为此,您应该使用useEffect钩子和 deps。 -
它似乎在 axios-hooks 库中被“保护”了。有一个 useEffect 并且在 [stringifiedConfig] 更新时我们调用了后端:github.com/simoneb/axios-hooks/blob/master/src/index.js
标签: reactjs axios react-hooks