Я хотел использовать функцию в качестве обработчика реакции для переноса запросов на выборку к API.
Мой текущий хук:
export function useAPI(url, options={}) {
const [auth, setAuth] = useGlobal('auth');
const [call, setCall] = useState(undefined);
const apiFetch = async () => {
const res = await fetch(url, {
...options,
});
if (!res.ok)
throw await res.json();
return await res.json();
};
function fetchFunction() {
fetch(url, {
...options,
});
}
useEffect(() => {
// Only set function if undefined, to prevent setting unnecessarily
if (call === undefined) {
setCall(fetchFunction);
//setCall(apiFetch);
}
}, [auth]);
return call
}
Таким образом, в функции реагирования я мог бы сделать следующее ...
export default function LayoutDash(props) {
const fetchData = useAPI('/api/groups/mine/'); // should return a function
useEffect(() => {
fetchData(); // call API on mount
}, []);
render(...stuff);
}
Но, похоже, реакция не не в состоянии использовать функции в таких хуках. Если я установлю call
на fetchFunction
, он вернет undefined
. Если я установлю его на apiFetch
, он выполнит и вернет обещание вместо функции, которую я могу вызвать, когда захочу в другом компоненте.
Изначально я выбрал реакционные хуки, потому что я не могу использовать useGlobal
внешние реактивные компоненты / крючки. И мне нужно иметь доступ к глобальной переменной reactn
auth
, чтобы проверить, не истек ли токен доступа.
Так что было бы лучшим способом go по этому поводу? Конечной целью является возможность передать (url, options)
функции, которая будет оберткой для запроса на выборку. (Он проверяет, истек ли auth.access
, и если да, сначала получает новый токен доступа, затем выполняет вызов API, в противном случае он просто вызывает API). Если бы у меня был другой способ go об этом, кроме как реагировать на хуки, я бы хотел знать.