为什么这个自定义钩子在反应中返回未定义?

时间:2021-03-03 08:45:45

标签: javascript reactjs react-hooks

我正在 React 中创建一个自定义钩子,这是我的代码:

import {useEffect} from 'react';

const useFetch = (url) => {
    useEffect(() => {
        const fetchData = () => {
            const data = url + "TEST";
            return data;
        }
        fetchData();
    })
}

export default useFetch;

它现在返回一些虚拟值,但这只是出于测试目的。

这是我调用自定义钩子的地方:

const Data = useFetch("https://customapiurlrandom.com/");
 useEffect(() => {
 console.log(Data);
}, [])

问题是,当我检查控制台时,我看到了 undefined。我不知道为什么。

有什么想法吗?提前致谢。

1 个答案:

答案 0 :(得分:2)

你的自定义钩子没有返回任何东西。你应该添加一个状态来保留值并返回它

import {useEffect, useState} from 'react';

const useFetch = (url) => {
    const [data, setData] = useState(null);

    useEffect(() => {
        const fetchData = () => {
            const data = url + "TEST";
            return data;
        }
        setData(fetchData());
    },[url, setData]);

    return data;
}

export default useFetch;

然后像这样使用

const Data = useFetch("https://customapiurlrandom.com/");
useEffect(() => {
    console.log(Data);
}, [Data])