【问题标题】:Return function from inside custom hook从自定义钩子内部返回函数
【发布时间】:2021-06-14 22:10:45
【问题描述】:

我有下面的自定义钩子;

export default function useFetch(url) {
    const [response, setResponse] = useState();
    useEffect(() => {
        const fetchresponse = async () => {
            // code to fetch response from api
        }
        fetchresponse();
    }, [url]);

    return [response];
}

虽然上述功能从我的功能组件开始就可以正常工作,但我想让它可重用并从我的主要组件中的其他位置(例如按钮单击)调用它们,即在按钮单击时点击 api。 因此,我想返回一个可执行函数,可以在单击按钮时调用它。

考虑到我的自定义钩子中有一个 useEffect ,我该怎么做?

【问题讨论】:

    标签: javascript reactjs react-hooks


    【解决方案1】:

    只需在useEffect 挂钩之外定义函数即可。

    那么它就会在范围内返回。

    function useFetch(url) {
        const [response, setResponse] = useState();
    
        const fetchresponse = async () => {
            // code to fetch response from api
        }
    
        useEffect(() => {
            fetchresponse();
        }, [url]);
    
        return [response, fetchresponse];
    }
    

    可以选择将函数包装在 useCallback 中,这样它就不会在每次渲染时重新定义。

    【讨论】:

    • 谢谢...就返回值而言(例如此处的 api 响应),因为当我在说按钮单击时调用可执行函数(例如此处的 fetchresponse)时,我需要该数据响应,应该我也从这个函数(这里是 fetchresponse)返回了我从整个钩子返回的相同的东西?
    • 通常你的设计应该是调用fetchresponse更新response状态,该状态已经在使用这个钩子的组件中使用,因此它会触发该组件的重新渲染。
    • 嗯好的...明白了...虽然尝试那样做,但我觉得我现在遇到了另一个问题...即在我的主要组件中,我可以说 3 个单独的 API 调用,每个调用对应一个不同的状态(例如 3 个差异网格数据)......所以不确定如何实现......
    猜你喜欢
    • 1970-01-01
    • 2020-08-20
    • 2020-03-25
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    相关资源
    最近更新 更多