Отделить перехват от компонента и затем импортировать перехват в компонент

#reactjs

#reactjs

Вопрос:

Итак, я, наконец, глубоко погрузился в хуки. Да, теперь я понимаю, насколько простыми они могут быть в использовании. Однако я знаю, что одним из наиболее важных аспектов этого является логика повторного использования. Чтобы разделить перехват между компонентами и сделать мой функциональный компонент (теперь контейнер?) еще чище, как бы мне отделить это? Я понимаю, что могу создать пользовательский хук, если он начинается с use. Итак, например, я хочу получить кучу запросов и получить длину, у меня есть следующее:

 import React, { useState, useEffect } from 'react';
import axios from 'axios';

function TicketCounter() {
    const [data, setData] = useState([]);
    useEffect(() => {
        axios.get(`/ticketapi/ticketslist/`)
            .then(res => {
                if (res.data) {
                    setData(res.data)
                }
            })
    }
        , []);

    return (
        <React.Fragment>
            {data.length}
        </React.Fragment>
    );
}

export default TicketCounter
  

Каков наилучший способ сделать это? Какой метод вы используете? Вы храните эти перехваты внутри своей папки src? Я полагаю, у вас есть папка для перехватов, причем у каждого перехвата есть свой собственный js-файл? В любом случае, заранее спасибо, ребята. Мне очень НРАВИТСЯ react и все, что он может предложить, и я в восторге от хуков (спустя 2 месяца после всех остальных, lol).

Ответ №1:

Ну, я понял это.

Файл перехвата Sep

 import React, { useState, useEffect } from 'react';
import axios from 'axios';
const useFetchAPI = (url) => {
    const [data, setData] = useState([]);
    useEffect(() => {

        axios.get(url)
            .then(res => {
                if (res.data) {
                    setData(res.data)
                }
            })
    }
        , []);


    return data;
};

export default useFetchAPI
  

и затем мой компонент (контейнер?)

 import React, { useState, useEffect } from 'react';

import useFetchAPI from '../hooks/TicketCounterHook'

function TicketCounter() {
    const url = `/ticketapi/ticketslist/`
    const data = useFetch(url)
    return (
        <React.Fragment>
            {data.length}
        </React.Fragment>
    );
}

export default TicketCounter