useEffect-React Hook useEffect具有缺少的依赖项:'数据库'

时间:2020-07-06 19:28:42

标签: reactjs react-hooks

当我删除[[])依赖项时,可以,但是创建了一个无限循环-使用它,我会遇到此错误,并且其他元素无法正常工作。

但是,我该如何解决?我不知道为什么会出现以下错误:

谢谢

Line 74:8:  React Hook useEffect has a missing dependency: 'database'. Either include it or remove the dependency array. You can also do a functional
update 'setDatabase(d => ...)' if you only need 'database' in the 'setDatabase' call  react-hooks/exhaustive-deps

function AddOrder(props) {
    const [step, setStep] = useState(1)
    const [redirect, setRedirect] = useState(false)

    const [database, setDatabase] = useState({
        clients: [],
        orders: [],
        client: [],
        products: [],
        subProducts: [],
        filteredSubProducts: [],


useEffect(() => {

        axios.get('http://127.0.0.1:8000/api/clients')
            .then(res => {
                setDatabase({...database, clients: res.data})
            })
        axios.get('http://127.0.0.1:8000/api/orders')
            .then(res => {
                setDatabase({...database, orders: res.data})
            })
        axios.get('http://127.0.0.1:8000/api/products')
            .then(res => {
                setDatabase({...database, products: res.data})
            })
        axios.get('http://127.0.0.1:8000/api/subProducts')
            .then(res => {
                setDatabase({...database, subProducts: res.data})
            })
    }, []);

2 个答案:

答案 0 :(得分:1)

我会接受警告的建议,并使用> jest Determining test suites to run...^C 的功能更新形式:

setDatabase

答案 1 :(得分:0)

Josh Wilson的替代解决方案:在依赖项数组中包含database

function AddOrder(props) {
    const [step, setStep] = useState(1)
    const [redirect, setRedirect] = useState(false)

    const [database, setDatabase] = useState({
        clients: [],
        orders: [],
        client: [],
        products: [],
        subProducts: [],
        filteredSubProducts: [],
    });

    useEffect(() => {
         axios.get('http://127.0.0.1:8000/api/clients')
            .then(res => {
                setDatabase({...database, clients: res.data})
            })
        axios.get('http://127.0.0.1:8000/api/orders')
            .then(res => {
                setDatabase({...database, orders: res.data})
            })
        axios.get('http://127.0.0.1:8000/api/products')
            .then(res => {
                setDatabase({...database, products: res.data})
            })
        axios.get('http://127.0.0.1:8000/api/subProducts')
            .then(res => {
                setDatabase({...database, subProducts: res.data})
            })
    }, [database]);
}