GOOGLE ADS

воскресенье, 24 апреля 2022 г.

Игнорирование последующих отправок Redux Thunk

Представьте это действие:

export const myAction = createAsyncThunk(...)

Я отправляю действие в 2 разных компонента React, оба из которых нуждаются в этом действии для заполнения состояния, от которого они зависят:

useEffect(() => {
dispatch(myAction())
}, [dispatch])

Это, конечно, приводит к тому, что преобразователь запускает свой асинхронный код дважды.

Я хочу сделать что-то похожее на takeLeadingRedux Saga с этим преобразователем.

Есть ли способ заставить последующие отправки myAction()игнорироваться, пока работает первая?


Решение проблемы

Пользовательское решение для крючка:

import React, { useCallback, useEffect } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { myAction } from './actions';
const useMyActionNonConcurrently = () => {
const dispatch = useDispatch();
const isPerformingMyAction = useSelector(state => state.someSlice.isPerformingMyAction);
const performMyAction = useCallback(
() => {
if (!isPerformingMyAction) {
dispatch(myAction())
// this thunk needs to toggle state.someSlice.isPerformingMyAction while it's running
}
},
[dispatch, isPerformingMyAction]
);
return performMyAction;
};
// Usage in a component (on mount):
const performMyAction = useMyActionNonConcurrently();
useEffect(performMyAction, []);

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...