Ich entwickle eine React + Meteor-Anwendung und habe Probleme mit der Benutzeranmeldungsfunktion.React ändert sich nicht in LoggedInView, wenn sich der Meteor-Benutzer anmeldet
Ich habe einen Header navbar, die eine andere Komponente zeigt, basierend auf, ob der Benutzer angemeldet ist
wie folgt aus:.
export default class Header extends Component {
constructor(props) {
super(props)
this.state = {
user: Meteor.user()
}
}
render() {
return (
<header className="main-header">
<nav className="navbar navbar-static-top">
<div className="navbar-custom-menu">
{this.state.user() !== null ? <LoggedInNavigation /> : <LoggedOutNavigation />}
</div>
</nav>
</header>
)
}
}
Nun ist diese funktioniert, aber es ändert sich nicht auf ein Benutzer wird angemeldet. Ich muss die Seite aktualisieren, um die Ansichten zu ändern (was offensichtlich nicht ideal ist).
Hier ist meine Login-Code:
Meteor.loginWithPassword(this.state.email, this.state.password, (error) => {
if (error)
this.setState({ meteorError: "Error: " + error.reason })
else {
this.setState({ meteorError: "" })
// Handle successful login
}
})
Das Problem ist, diese beiden Code-Blöcke in verschiedenen Komponenten sitzen. Der erste Block ist in imports/ui/components/main-layout/Header
und der zweite Block ist in imports/ui/components/authentication/Login
.
Wie gesagt, das Problem ist, dass der Benutzer sich anmelden kann, aber die Ansicht ändert sich nicht entsprechend dem Authentifizierungsstatus. Was ist die beste Vorgehensweise, um dies zu lösen?
EDIT:
Hier ist die Hierarchie der Komponenten:
1 - LoggedOutNav
MainLayout -> Header -> LoggedOutNav
2 - Login-Code
MainLayout -> Routes -> (Route path="/login" component={Login}) -> LoginForm
, die nicht funktionieren, weil der Staat, um sich zu ändern, wenn es neu zu machen ... –
Die Ansicht wird nicht da machen ändern ** wird aufgerufen erneut nur wenn this.setState ** (und Sie werden nicht setState in der Kopfzeile aufrufen, wenn die Anmeldung erfolgreich ist) verwendet wird oder die Requisiten für die Komponente geändert werden. Um eine gute Lösung für Ihren speziellen Fall zu finden, sollten Sie uns die Beziehung zwischen diesen Komponenten (Eltern-Kind, Kinder einer anderen Komponente ...) nennen. –
Ich werde meine Frage aktualisieren (es gibt eine sehr Entfernung Beziehung) –