#reactjs #react-native #redux
Вопрос:
Я нашел много похожих вопросов, но большинство из них не имеют решения redux. Я хотел бы позвонить по подписке после удаления товара из магазина redux.
Ниже приведены коды, по которым я отменяю все подписки, но я не уверен, что поступаю правильно!
const useFetchProperty = (propertyId, refresh = false) => {
const dispatch = useDispatch();
const property = useSelector(state => selectPropertyById(state, propertyId));
const isConnected = useIsConnected();
useEffect(() => {
let isSubscribed = true;
if (
isSubscribed amp;amp;
isConnected amp;amp;
(property === undefined || refresh === true)
) {
dispatch(fetchProperty({propertyId: propertyId}));
}
return () => (isSubscribed = false);
}, [dispatch, refresh, isConnected, property, propertyId]);
return property;
};
export default useFetchProperty;
CarDesign.js
const CardDesign = ({postId}) => {
const {t} = useContext(LocalizationContext);
const post = useFetchProperty(postId);
const currentLanguage = useSelector(currentAppLanguage);
const navigation = useNavigation();
//the rest show data would be here
}
Вы бы увидели, что я использую эти два
let isSubscribed = true;
и. return () => (isSubscribed = false);
Правильно ли отменять все подписки и асинхронные задачи с отправкой ???
Ответ №1:
Область действия ваших isSubscribe
переменных находится внутри useEffect
, поэтому нет необходимости делать следующее
return () => (isSubscribed = false);
Причина в том, что, когда ваш эффект использования вступит в силу, подписка на выпуск всегда будет иметь true
значение из — за объявления переменной. Поскольку область действия находится внутри useEffect
so, удаление возврата решит эту проблему
Но если вам действительно нужно его использовать, объявите isSubscribe
переменную глобально
Комментарии:
1. Привет @moshfiqrony, извините, мне непонятно, как это может произойти, если я определяю глобально или локально определяющую
isSubscribe
переменную. Я думаю, что определение переменной только не может заставить отменить все подписки.2. Проблема здесь в том. Вы определяете
isSubscribed
переменную внутри эффекта использования, и когда возврат вызываетсяisSubscribed
, теряется контекст или память. Так что происходит то, что он не может выполнитьisSubscribed = false
строку. Потому что он уже размонтирован.