Есть ли способ вызвать кастомный хук внутри useeffect в реакции? - PullRequest
1 голос
/ 07 мая 2020
const useApiCall = (asyncFunction, body) => {
  const [fetching, setFetching] = useState(false);
  const [response, setResponse] = useState(null);
  const [error, setError] = useState(null);
  const [cancel, setCancel] = useState(null);
  const [fetched, setFetched] = useState(false);
  const execute = useCallback(async cancelPromise => {
    try {
      setFetching(true);
      setResponse(null);
      setError(null);
      setFetched(false);
      setCancel(() => {
        return cancelPromise.cancel;
      });
      let result = await cancelPromise.promise;
      setResponse(result);
    } catch (ex) {
      setError(ex);
    } finally {
      setFetching(false);
      setFetched(true);
    }
  }, []);

  useEffect(() => {
    const cancelPromise = body
      ? makeCancelable(asyncFunction(body))
      : makeCancelable(asyncFunction());
    execute(cancelPromise);
    return () => cancelPromise.cancel();
  }, [asyncFunction, body, execute]);

  return { fetching, response, error, fetched, cancel };
};

Поскольку этот хук возвращает 4 состояния вызова API, я бы хотел использовать этот хук внутри другого хука, но условно. должен ли я создать еще один параметр, который будет вызывать API условно? например, примите другой параметр, скажем, shouldCall api (bool), и добавьте условие над методом выполнения, упомянутым в useEffect? ​​

...