我有一段觸發警告的代碼(代碼應該登錄到REST並關閉活動指示器)。我不明白我的組件是如何被卸載的,因爲我在button button上綁定了LoginPressed,所有可能的掛載都已經完成。請幫我擺脫它,並瞭解警告的原因...
UPD:感謝評論我發現組件被卸載和componentWillUnmount被調用...但我不明白爲什麼和什麼時候它正在發生的事情...React Native,「卸載組件上的setState()」警告
「警告:的setState(...):只能更新一安裝或安裝 組件這通常意味着你卸載的 組件調用的setState()這是一個NO-請檢查未定義的 組件的代碼。「
這裏是我的代碼,警告是由第二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
謝謝。但是我不明白爲什麼它實際上沒有被卸載......在調用堆棧出演沒有幫助,因爲我只是不明白髮生了什麼。組件更新和比,卸載...也許有一種mixins或代碼示例,以獲得更多的信息發生了什麼? –