【问题标题】:React Hook useEffect has missing dependencies: 'hideLoader' and 'showLoader'. Either include them or remove the dependency arrayReact Hook useEffect 缺少依赖项:“hideLoader”和“showLoader”。包括它们或删除依赖数组
【发布时间】:2020-11-05 10:09:44
【问题描述】:

我该如何解决这个错误 => React Hook useEffect 缺少依赖项:'hideLoader' 和 'showLoader'。要么包含它们,要么移除依赖数组 react-hooks/exhaustive-deps

如果我使用[showLoader, hideLoader] 作为依赖项,那么 hideLoader 不起作用?我该如何解决这个问题... showLoader 总是显示微调器,甚至 axios 获取数据!

FullPageLoader.js

import React from "react";
import Spinner from './loader/spinner.gif

const FullPageLoader = () => {
    return (
        <div className="text-center">
            <img src={Spinner} className="fp-loader" alt="loading" style={{ marginTop: '8%' }} />
        </div>
    );
};

export default FullPageLoader;

使用FullPageLoader.js

import React, { useState } from "react";
import FullPageLoader from "../FullPageLoader";

const useFullPageLoader = () => {
    const [loading, setLoading] = useState(false);

    return [
        loading ? <FullPageLoader /> : null,
        () => setLoading(true), //Show loader
        () => setLoading(false) //Hide Loader
    ];
};

export default useFullPageLoader;

App.js

import useFullPageLoader from "../components/hook/useFullPageLoader";

const [loader, showLoader, hideLoader] = useFullPageLoader();

useEffect(() => {
    const fetchItems = async () => {
        try {
            showLoader();
            const res = await axios.get(`${process.env.REACT_APP_API_URL}/api/approved/`);
            setItems(res.data)
            hideLoader();
        }
        catch (err) {
            console.log(`???? Axios request failed: ${err}`);
        }
    }
    fetchItems();
}, [hideLoader, showLoader]);

【问题讨论】:

  • 你的 React Hook useEffect 缺少依赖项:'hideLoader' 和 'showLoader'。您需要包含它们或删除依赖项数组。该错误从字面上告诉您如何修复它。

标签: reactjs


【解决方案1】:

它告诉你该怎么做:

const [loader, showLoader, hideLoader] = useFullPageLoader();

useEffect(() => {
    const fetchItems = async () => {
        try {
            showLoader();
            const res = await axios.get(`${process.env.REACT_APP_API_URL}/api/approved/`);
            setItems(res.data)
            hideLoader();
        }
        catch (err) {
            console.log(`? Axios request failed: ${err}`);
        }
    }
    fetchItems();
}, [showLoader, hideLoader]); // add dependencies here...

【讨论】:

  • 如果我使用[showLoader, hideLoader] 作为依赖项,那么 hideLoader 不起作用?我该如何解决这个问题... showLoader 总是显示微调器,甚至 axios 获取数据!
  • 我假设useFullPageLoader 是一个自定义钩子?能发下相关代码吗?
猜你喜欢
  • 2020-07-19
  • 1970-01-01
  • 2021-10-29
  • 2020-05-31
  • 1970-01-01
  • 2021-05-07
  • 2021-08-24
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多