【发布时间】:2019-10-09 23:02:56
【问题描述】:
我有一个与以下类似的自定义 Hook:
import { useEffect, useState } from 'react';
import axios from 'axios';
const myCustomHook = () => {
const [countries, setCountries] = useState([]);
const [isLoading, setLoading] = useState(true);
useEffect(() => {
(async () =>
await axios
.get("MY_API/countries")
.then(response => setCountries(response.data))
.finally(() => setLoading(false)))();
}, []);
return countries;
};
export default myCustomHook;
钩子效果很好,但我在我的应用程序的三个不同领域使用它,尽管使用钩子的所有国家都是相同的。
有没有很好的模式来调用 axios 请求一次而不是三次?
编辑 - 解决后的最终代码
import { useEffect, useState } from 'react';
import axios from 'axios';
let fakeCache = {
alreadyCalled: false,
countries: []
};
const myCustomHook = (forceUpdate = false) => {
const [isLoading, setLoading] = useState(true);
if (!fakeCache.alreadyCalled || forceUpdate) {
fakeCache.alreadyCalled = true;
(async () =>
await axios
.get("MY_API/countries")
.then(response => setCountries(response.data))
.finally(() => setLoading(false)))();
}
return countries;
};
export default myCustomHook;
【问题讨论】:
-
我投票结束这个问题,因为它属于Code Review。
标签: javascript reactjs request axios