Как разрешить размонтированный компонент? - PullRequest
0 голосов
/ 02 мая 2020

У меня ошибка неустановленного компонента.

Warning: 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,
    in Home (created by Context.Consumer)

Я следовал руководству, чтобы решить его, но общее решение не работает для меня (проверка с помощью переменной "mount"). Я попытался разделить первое использование эффекта, но ничего не работает ... Не могли бы вы помочь мне?

const [espaces, setEspaces] = useState(null);
const [espaceSelected, setEspaceSelected] = useState(null);
const [espaceInSession, setEspaceInSession] = useState(null);
const [redirectToLogin, setRedirectToLogin] = useState(false);

useEffect(() => {
    let mounted = true;
    getEspaces().then(data => {
        if (mounted) {
            setEspaces(data);
            if (espaces) {
                setEspaceSelected(espaces[0].name);
                setEspaceInSession(espaces[0].id_espace);
            }
        }
    });
    getUserLoged().then(result => {
        if (result === -1 && mounted) {
            setRedirectToLogin(true); /**The error is located here, when I remove this line all is good.**/
        }
    });
    return () => mounted = false;
}, []);

useEffect(() => {
    getEspaces().then(data => setEspaces(data));
}, [createSpaceModalVisible, deleteSpaceModalVisible]);

useEffect(() => {
    if (espaceInSession) {
        console.log('Update espace id Session storage: ' + espaceInSession.id_espace);
        AsyncStorage.setItem('id_espace', '' + espaceInSession.id_espace);
    }
}, [espaceInSession]);

return (
        <View>
            {redirect === true && <Redirect to='/espace' />}
            {redirectToLogin === true && <Redirect to='/login' />}
...);

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