React Custom Hook

1 minute read

Custom react hook to call an API

 1import { useState, useEffect } from 'react';
 2import axios from 'axios';
 3
 4const API_KEY = process.env.REACT_APP_API_KEY;
 5const url = `https://api.giphy.com/v1/gifs/random?api_key=${API_KEY}`;
 6
 7const useGif = (tag) => {
 8    const [gif, setGif] = useState('');
 9
10    const fetchGif = async (tag) => {
11        const { data } = await axios.get(tag ? `${url}&tag=${tag}` : url);
12
13        const imageSrc = data.data.images.downsized_large.url;
14
15        setGif(imageSrc);
16    }
17
18    useEffect(() => {
19        fetchGif(tag);
20    }, [tag]);
21
22    return { gif, fetchGif }
23}
24
25export default useGif;

Usage

Call custom react hook

 1
 2import React from 'react';
 3
 4import useGif from '../useGif';
 5
 6const Tag = () => {
 7    const {gif, fetchGif} = useGif();
 8
 9    return (
10        <div className="container">
11            <h1>Random Gif</h1>
12            <img width="500" src={gif} alt="Random Gif" />
13            <button onClick={fetchGif}>CLICK FOR NEW</button>
14        </div>
15    );
16}
17
18export default Tag;

Call custom react hook with param

 1
 2import React, { useState } from 'react';
 3
 4import useGif from '../useGif';
 5
 6const Tag = () => {
 7    const [tag, setTag] = useState('dogs');
 8    const {gif, fetchGif} = useGif(tag);
 9
10    return (
11        <div className="container">
12            <h1>Random {tag} Gif</h1>
13            <img width="500" src={gif} alt="Random Gif" />
14            <input value={tag} onChange={(e) => setTag(e.target.value)} />
15            <button onClick={() => fetchGif(tag)}>CLICK FOR NEW</button>
16        </div>
17    );
18}
19
20export default Tag;