Рубрики
Без рубрики

UserEducer вместо использования при вызове API!

Привет, народ! Прошло много времени с тех пор, как React представила крючки, и мы все влюбились в его P … Tagged with React, JavaScript, Redux, WebDev.

Привет, народ!

Прошло много времени с тех пор, как React представила крючки, и мы все влюбились в его модели и простоту использования. Хотя это так, многие из нас не используют все функции, крючки предоставляют и userEducer один из них! Поскольку Usestate – это крюк, который мы изучаем в первую очередь, мы не используем особого использования userEducer крюк. Итак, в этой статье я сосредоточусь на userEducer и проведет вас через лучшие сведения об использовании для его реализации.

Итак, давайте погрузимся!

Что такое пользовательский индекс?

userEducer это еще один крюк, используемый для современного государственного управления в React. Эта концепция была введена в Redux сначала, а затем она также адаптирована React. Как правило, Reducer – это функция, которая принимает два аргумента – Государство и действие . Основываясь на предоставленном действии, Reducer выполнит некоторые операции в состоянии и возвращает новое обновленное состояние. В контексте React, userEducer Также выполняет аналогичное управление государством. Вы можете подробно прочитать больше об пользовательском образовании подробно в реагировать документацию

Как использовать его для вызовов API?

До сих пор у вас есть основная идея UserEducer Hook до сих пор. Давайте просто погрузимся прямо в код и поймем, как использование пользовательского управления сделает наш код более эффективным по сравнению с Usestate.

Давайте сначала начнем с вызова API с использованием Simple Usestate. Это будет выглядеть примерно так –

// user component using useState 
const User = () => {
    const [userDetails, setUserdetails] = useState();
    const [loading, setLoading] = useState(false);
    const [error, setError] = useState();

    useEffect(() => {
        setLoading(true);
        const getUsers = async () => {
            let response = await axios.get('/users');
            if (response.status == 200) {
                setUserdetails(response.data);
                setError(false);
                return;
            }
            setError(response.error);
        };

        getUsers();
        setLoading(false);
    });

    return (
        
{loading ? (

loading...

) : error ? (

{error}

) : (
    {userDetails.map((user) => (
  • {user.name}

    {user.location}

  • ))}
)}
); }; export default User;

Это очень простой вызов API. В реальных сценариях мы должны управлять большим количеством государств, чем это. Но для начала, давайте предположим, что у нас есть 3 состояния для управления, и они зависят друг от друга. Когда наше приложение становится все более сложным, иногда мы определяем более 7-8 состояний. В таких сценариях, если мы используем только Usestate, то становится очень утомительным отслеживать все состояния и обновлять их синхронно.

Чтобы решить все эти проблемы, лучшим подходом является использование пользователя. Давайте посмотрим на тот же вызов API с помощью пользователя.

// user component using useReducer
const ACTIONS = {
    CALL_API: 'call-api',
    SUCCESS: 'success',
    ERROR: 'error',
};

const userDetailsReducer = (state, action) => {
    switch (action.type) {
        case ACTIONS.CALL_API: {
            return {
                ...state,
                loading: true,
            };
        }
        case ACTIONS.SUCCESS: {
            return {
                ...state,
                loading: false,
                userDetails: action.data,
            };
        }
        case ACTIONS.ERROR: {
            return {
                ...state,
                loading: false,
                error: action.error,
            };
        }
    }
};

const initialState = {
    userDetails: '',
    loading: false,
    error: null,
};

const User = () => {
    const [state, dispatch] = useReducer(userDetailsReducer, initialState);
    const { userDetails, loading, error } = state;

    useEffect(() => {
        dispatch({ type: ACTIONS.CALL_API });
        const getUsers = async () => {
            let response = await axios.get('/users');
            if (response.status == 200) {
                dispatch({ type: ACTIONS.SUCCESS, data: response.data });
                return;
            }
            dispatch({ type: ACTIONS.ERROR, error: response.error });
        };

        getUsers();
    });

    return (
        
{loading ? (

loading...

) : error ? (

{error}

) : (
    {userDetails.map((user) => (
  • {user.name}

    {user.location}

  • ))}
)}
); }; export default User;

Здесь мы используем функцию отправки, чтобы вызвать наш редуктор. Внутри редуктора корпус переключения определяется для обработки действий, предоставленных функцией диспетчерской. Объект Actions, объявленный выше, убедится, что каждый раз, когда мы передаем предопределенное действие в функцию отправки. Вы можете пропустить этот шаг и напрямую использовать строки. Внутри каждого случая переключения мы выполняем операции в данном состоянии и возвращаем новое состояние.

Я знаю, что ваша первая реакция, увидев код, это выглядит длинным! Но поверьте мне, это имеет больше смысла. UserEducer Hook принимает два параметра, функцию редуктора и начальное состояние. Функция Reducer будет выполнять все обновления состояния в предоставленном состоянии. Но каковы преимущества этого?

  • Состояние будет обновляться в одной функции, основываясь на действии, и оно будет зависеть от предыдущего.

    Когда мы передаем действие к редуктору, мы говорим, какую операцию выполнять в предыдущем состоянии. Таким образом, мы можем убедиться, что все штаты синхронизируются с этой операцией, и есть очень шансы пропустить любые обновления в состоянии.

  • Легко управлять сложными состояниями

    Поскольку одной функцией является обновление состояний, легче управлять сложными состояниями, содержащими массивы и объекты. Мы можем эффективно пользоваться эффективным обработкой обновлений по объектам и массивам.

  • Простой в тестировании и предсказуемом

    Редакторы являются чистыми функциями и выполняют операции на основе предопределенных действий. Следовательно, они не имеют каких -либо побочных эффектов и будут возвращать те же значения, когда будут присваивать те же аргументы. Это делает их предсказуемыми и простыми в тестировании при реализации.

Когда выбрать пользовательский обретчик через Usestate?

Пользовательские программы полезны для выбора в USESTATE, но не каждый раз. Если ваш вариант использования прост, они добавят ненужную сложность в ваш код. Я использую эту пару правил, чтобы выбрать пользовательскую программу по USESTATE – 1 Если есть много состояний, зависящих друг от друга. 2. Если состояние является сложным объектом.

Я надеюсь, что эти правила также помогут вам решить, какой крючок управления государством. Если у вас есть какой -либо другой фактор, чтобы выбрать между этими двумя, дайте мне знать в комментариях.

Спасибо, что прочитали эту статью! Надеюсь, это поможет вам каким -то образом. Продолжайте учиться 🙌

Оригинал: “https://dev.to/ms_yogii/usereducer-instead-of-usestate-while-calling-apis-3e1l”