【发布时间】:2020-05-10 16:19:24
【问题描述】:
我无法理解此错误的来源。 控制台说:
无法对未安装的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要修复,请在 LoginScreen 的 componentWillUnmount 方法中取消所有订阅和异步任务。
我尝试了 _isMounted 的技巧 - 不起作用。
export default class LoginScreen extends React.Component {
_isMounted = false;
constructor(props) {
super(props);
this.state = {
email: "",
password: "",
errorMessage: null,
logOut: false,
};
this.handleLogin = this.handleLogin.bind(this);
}
componentDidMount() {
this._isMounted = true;
}
componentWillUnmount() {
this._isMounted = false;
}
handleLogin() {
if (this._isMounted) {
const { email, password } = this.state;
firebase.auth().signInWithEmailAndPassword(email, password)
.catch(errorMessage => this.setState({errorMessage}));
this.props.navigation.navigate("Direction", { email, password });
}
};
render() {
return (
<View style={styles.container}>
<Text style={styles.greeting}>
Log in
</Text>
<View style={styles.form}>
<View>
<Text style={styles.inputTitle}>
Email
</Text>
<TextInput style={styles.input}
autoCapitalize="none"
onChangeText={ email => this.setState({email})}
value={this.state.email}>
</TextInput>
</View>
<View>
<Text style={styles.inputTitle}>
Password
</Text>
<TextInput style={styles.input}
secureTextEntry
autoCapitalize="none"
onChangeText={password => this.setState({password})}
value={this.state.password}>
</TextInput>
</View>
<Text style={styles.error}>
{ this.state.errorMessage &&
<Text style={styles.error}>
Incorrect login or password
</Text>
}
</Text>
<TouchableOpacity style={styles.button}
onPress={this.handleLogin}>
<Text style={styles.inputTitle}>
Log in
</Text>
</TouchableOpacity>
<View style={styles.register}>
<Text style={{color: "grey"}}>
Don't have an Account
</Text>
<TouchableOpacity style={styles.secondButton}
onPress={() => { this.props.navigation.navigate("Register")}}>
<Text style={styles.inputTitle}>
Registration
</Text>
</TouchableOpacity>
</View>
</View>
</View>
)
}
}
【问题讨论】:
标签: reactjs react-native navigation