#javascript #reactjs #callback #next.js #redux-thunk
#javascript #reactjs #обратный вызов #next.js #redux-thunk
Вопрос:
У меня есть следующий фрагмент, который касается потока аутентификации для веб-приложения, над которым я работаю. Он устанавливает информацию об аутентификации пользователя в состояние Redux. Прослушиватель onAuthStateChanged возвращает функцию отмены подписки, и мне нужно вызвать ее в какой-то момент, чтобы предотвратить утечку памяти. В приведенном ниже коде я вызываю функцию отмены подписки из функции обратного вызова onAuthStateChanged . Можно ли это сделать? В общем, можно ли отказаться от подписки на слушателя в его обратном вызове?
export const frontEndAuthCheck = () => async dispatch => {
dispatch({
type: actions.AUTH_CHECK_RESET_FRONT_END,
});
dispatch({
type: actions.SET_TO_LOGGED_OUT_FRONT_END,
});
dispatch({
type: actions.AUTH_CHECK_STARTED_FRONT_END,
});
let unsubscribeFunction;
unsubscribeFunction = firebase.auth().onAuthStateChanged( (user) => {
if (user) {
dispatch({
type: actions.SET_TO_LOGGED_IN_FRONT_END,
});
dispatch({
type: actions.AUTH_CHECK_COMPLETE_FRONT_END,
});
}
else {
dispatch({
type: actions.AUTH_CHECK_COMPLETE_FRONT_END,
});
}
if (unsubscribeFunction) unsubscribeFunction();
});
}
Комментарии:
1. Я полагаю, что альтернативой является сохранение этого обратного вызова отмены подписки в состоянии где-нибудь, чтобы быть вызванным кодом позже, когда вы захотите отказаться от подписки. Или реорганизовать его, чтобы поместить логику firebase в поставщик контекста React, подключенный к redux. Есть ли проблема с приведенным выше кодом или вы скорее ищете обзор кода ?
2. Я немного новичок во всем этом и просто пытаюсь концептуально понять, можно ли отказаться от подписки на слушателя в его обратном вызове? Мне неясно, вызовет ли это какие-либо проблемы.
3. Концептуально я считаю, что это должно работать изолированно. Теперь сложнее сказать, работает ли это в более масштабной схеме вашего приложения, не видя, как оно работает в браузере или в ходе интеграционного тестирования.
4. Спасибо — оцените цвет.