В моем компоненте React у меня есть запрос async
, который отправляет действие в мое хранилище Redux, которое вызывается в хуке useEffect
:
const loadFields = async () => {
setIsLoading(true);
try {
await dispatch(fieldsActions.fetchFields(user.client.id));
} catch (error) {
setHasError(true);
}
setIsLoading(false);
}
useEffect(() => { if(isOnline) { loadFields() } }, [dispatch, isOnline]);
Действие запрашивает данные через запрос выборки. :
export const fetchFields = clientId => {
return async dispatch => {
try {
const response = await fetch(
Api.baseUrl + clientId + '/fields',
{ headers: { 'Apiauthorization': Api.token } }
);
if (!response.ok) {
throw new Error('Something went wrong!');
}
const resData = await response.json();
dispatch({ type: SET_FIELDS, payload: resData.data });
} catch (error) {
throw error;
}
}
};
export const setFields = fields => ({
type : SET_FIELDS,
payload : fields
});
Когда это отображается в приложении React, выдается следующее предупреждение:
Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in %s.%s, a useEffect cleanup function
Я полагаю, что это происходит, потому что обещание неиметь функцию «очистки». Но я не уверен, где это разместить? Должен ли я иметь некоторую логику в LoadFields()
? Или это должно быть сделано в useEffect
хуке?