React + Meteorアプリケーションを開発中で、ユーザーのログイン機能に問題があります。Meteorユーザーのログイン時にRegedがLoggedInViewに変更されない
は、私は、ユーザーがログインしているかどうかに基づいて異なるコンポーネントを表示するヘッダーナビゲーションバーを持ってこのよう
:。
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>
)
}
}
さて、これは動作しますが、それは時に変更されません。私はビューを変更するためにページをリフレッシュする必要があります(明らかに理想的ではありません)。ここで
は私のログインコードです:
Meteor.loginWithPassword(this.state.email, this.state.password, (error) => {
if (error)
this.setState({ meteorError: "Error: " + error.reason })
else {
this.setState({ meteorError: "" })
// Handle successful login
}
})
問題は、コードのこれら2つのブロックが異なるコンポーネントに座っています。
最初のブロックはimports/ui/components/main-layout/Header
で、2番目のブロックはimports/ui/components/authentication/Login
です。
私が言ったように、問題はユーザーがログインできるが、認証状態に応じてビューが変わらないということです。これを解決するベストプラクティスは何ですか?
編集:ここでは
は、コンポーネントの階層です:
1 - LoggedOutNav
MainLayout -> Header -> LoggedOutNav
2 - ここで問題があることであるコード
MainLayout -> Routes -> (Route path="/login" component={Login}) -> LoginForm
... –
:コードのようなものになるだろうという再度this.setState **(ログインが成功したときにヘッダー内のsetStateを呼び出さない)が使用されている場合、またはコンポーネントに提供された小道具が変更された場合のみ特定のケースに対する良い解決策を見つけるためには、これらのコンポーネント(親子、別のコンポーネントの子供...)の関係を教えてください。 –
私の質問を更新します(非常に距離関係があります) –