У меня есть кусок кода, который вызывает предупреждение (код должен войти в REST и выключить индикатор активности). Я не понимаю, как мой компонент можно размонтировать, поскольку я привязываю onLoginPressed к нажатию кнопки, после того, как все возможные монтировки уже будут завершены. Пожалуйста, помогите мне избавиться от него и понять причину предупреждения ...
UPD: Благодаря комментариям я выяснил, что компонент размонтирован, а компонентWillUnmount вызывается ... Но я не понимаю, почему и когда он происходит ...React Native, "setState() on unmounted component" warning
«Предупреждение: SetState (...):.. Может только обновить смонтированная или монтаж компонента Это обычно означает, что вы назвали SetState() на отмонтированном компонента Это нет- op. Проверьте код для неопределенного компонента . "
Вот мой код, предупреждение инициируется второй setState
:
onLoginPressed(){
console.log('Attempted to login with: '+this.state.username);
this.setState({showProgress: true});
AuthService.login({
login: this.state.username,
password: this.state.password
}, (results)=> {
this.setState(Object.assign({ // have to create a solid Object with all states to be changed at once
showProgress: false // turning off ActivityIndicator
}, results));
if(results.success && this.props.onLogin){
this.props.onLogin(); // Yey! We logged in! Let's move to the next View
}
});
}
... AuthService.js:
login (creds, callback) {
fetch(CFG.AUTH_URL)
.then((response)=> {
if((response.status >= 200) && (response.status < 300)){
return response.json();
}
throw {
serverError: (response.status == 500) || (response.status == 501),
unknownError: (response.status != 500) || (response.status != 501)
};
})
.then((result)=> {
AsyncStorage.multiSet([ // Have to save login+password and session_hash for later use...
[authKey, JSON.stringify(creds)],
[sessionKey, result.data.session_hash]
], (err)=> {
if (err) throw err;
});
return callback({success: true});
}
})
.catch((err)=> {
return callback(err);
});
}// end of login
Добавьте 'componentWillUnmount' и проверьте, действительно ли и почему он размонтирует. – zerkms
Спасибо. Но у меня нет идеи, почему она действительно отключается ... В главной роли в стеке вызовов не помогает, потому что я просто не понимаю, что происходит. Компонент обновлен и чем, unmounted ... Может быть, есть какие-то миксины или примеры кода, чтобы получить больше информации о том, что происходит? –