2017-03-13 1 views
26


onEnterメソッドが機能しません。それはどういう考えですか?React-RouterでonEnterが呼び出されていない

// Authentication "before" filter 
function requireAuth(nextState, replace){ 
    console.log("called"); // => Is not triggered at all 
    if (!isLoggedIn()) { 
    replace({ 
     pathname: '/front' 
    }) 
    } 
} 

// Render the app 
render(
    <Provider store={store}> 
     <Router history={history}> 
     <App> 
      <Switch> 
      <Route path="/front" component={Front} /> 
      <Route path="/home" component={Home} onEnter={requireAuth} /> 
      <Route exact path="/" component={Home} onEnter={requireAuth} /> 
      <Route path="*" component={NoMatch} /> 
      </Switch> 
     </App> 
     </Router> 
    </Provider>, 
    document.getElementById("lf-app") 

編集:

方法は、私はonEnter={requireAuth()}を呼び出すときに実行されますが、明らかにそれは目的ではない、と私はまた、所望のパラメータを取得することはできませんされています。

+2

どの反応ルータバージョンを使用していますか? –

答えて

53

onEnterは、react-router-4には存在しません。あなたは希望の機能を得るために<Route render={ ... } />を使うべきです。私はRedirectの例があなたの特定のシナリオを持っていると信じています。私はあなたのものと一致するように以下を修正しました。反応ルータ-V4 onEnteronUpdate、及びonLeaveが除去され、 から

<Route exact path="/home" render={() => (
    isLoggedIn() ? (
    <Redirect to="/front"/> 
) : (
    <Home /> 
) 
)}/> 
+1

リソースへのリンクがありがとうございます。 – Trace

+0

しかし、私は今日、これがリダイレクトされる新しいURLのコンポーネントを実際にレンダリングしないことに気付きました。これは望ましい行動ですか?非常に論理的ではないようです... – Trace

+0

@KimGysenいいえ、これはデフォルトの動作ではありません。 'Switch'コンポーネントを使用している場合、' Redirect'は期待どおりレンダリングされるべきです。しかし、もしあなたが 'Switch'を使っていなければ' Redirect'はレンダリングされません。 –

3

DOC Migrating from v2/v3 to v4記載:*プロパティ

をルータV3はonEnterを提供して反応させ、onUpdate、及びonLeave の方法。これらは本質的にReactのライフサイクルメソッドを再現していました。

v4では、aによってレンダリングされたコンポーネント のライフサイクルメソッドを使用する必要があります。 onEnterの代わりに、 componentDidMountまたはcomponentWillMountを使用します。 onUpdate、 を使用する場合は、componentDidUpdateまたはcomponentWillUpdate(またはおそらく componentWillReceiveProps)を使用できます。 onLeaveは、 componentWillUnmountに置き換えることができます。

関連する問題