Ich verwende React-Native-Router-Flux zum Routing meiner App. Das Problem ist, dass es so aussieht, als wenn sich ein Redux-Zustand ändert, ALLE Komponenten unter dem Router werden neu gerendert, nicht nur die "aktuelle" Komponente.Verhindern, dass reactive-native-router-flux alle Komponenten rendert
können also sagen, ich habe zwei Komponenten unter dem Router: Register und Anmeldung und beide teilen sich die gleiche authenticationReducer. Wenn ein Authentifizierungsereignis (z. B. Benutzerregistrierung oder Anmeldung) fehlschlägt, möchte ich Fehlerwarnungen anzeigen.
Das Problem ist, dass wenn ein Fehler von einer der Komponenten ausgelöst wird, zwei Warnungen gleichzeitig angezeigt werden, eine von jeder Komponente. Ich nehme an, wenn ich mich gerade in der Registrierungsszene befinde, würde nur der Fehleralarm von der Register-Komponente angezeigt werden.
Es sieht jedoch so aus, als würden beide Komponenten immer dann rendern, wenn sich der Redux-Status ändert, und ich sehe 2 Warnungen (im folgenden Beispiel "Fehler von REGISTER" und "Fehler von SIGNIN").
Hier sind die Komponenten:
main.ios.js
export default class App extends Component {
render() {
return (
<Provider store={store}>
<Router>
<Scene key='root'>
<Scene key='register' component={Register} type='replace'>
<Scene key='signin' component={SignIn} type='replace'>
</Scene>
</Router>
</Provider>
);
}
}
Register.js
class Register extends Component {
render() {
const { loading, error } = this.props;
if (!loading && error) {
Alert.alert('Error from REGISTER');
}
return <View>...</View>;
}
}
const mapStateToProps = (state) => {
return {
loading: state.get("authenticationReducer").get("loading"),
error: state.get("authenticationReducer").get("error"),
};
};
export default connect(mapStateToProps)(Register);
SignIn.js
class SignIn extends Component {
render() {
const { loading, error } = this.props;
if (!loading && error) {
Alert.alert('Error from SIGNIN');
}
return <View>...</View>;
}
}
const mapStateToProps = (state) => {
return {
loading: state.get("authenticationReducer").get("loading"),
error: state.get("authenticationReducer").get("error"),
};
};
export default connect(mapStateToProps)(SignIn);
Wie ändere ich das so, dass nur die Meldung Registerfehler zeigt, wenn ich zur Zeit bin auf der Register-Szene, und vice versa?
Dank
rufen Sie einfach die Pop-Funktion der Aktion des Routers Flusses reagieren. – AndrienPecson