2016-11-15 42 views
1

リアクションルータを使用していますので、クリックしたときに詳細ページにリダイレクトしたいと思います。ここでリアクションルータのプッシュではURLのみが変更されます

は私のコンポーネント変更しましたが、私のページは同じまま、URLをクリックしてオン

<Table 
    model={TypeModel} 
    source={this.props.types} 
    selectable={false} 
    onRowClick={index => this.context.router.push(`/dashboard/types/${this.props.types[index].id}`)} 
/> 

です。私はこのようなルートを定義しました

{ 
    path: '/dashboard', 
    component: requireAuthentication(DashboardLayout), 
    indexRoute: Dashboard, 
    childRoutes: [{ 
    path: 'types', 
    indexRoute: TypeListRoute(store), 
    childRoutes: [ 
     TypeDetailsRoute(store) // The path of this route is :id 
    ] 
    }] 
} 

私は理由がわかりません、これはアプリケーション内の他の場所で動作しています。私もチェックして、これは

  • programmatically-navigate-using-react-router
  • 私が何かを見逃していました

  • react-router-push-only-changes-the-url-and-does-not-navigate
    • browserhistory-push-doesnt-navigate-to-new-page

      をスレッド試してみましたか?


      詳細

      私のルータDashboardLayoutは、いくつかのコンポーネント

      にそのラップの子供たちの反応構成要素である

      createRoutes = store => ({ 
          childRoutes: [{ 
          path: '/', 
          component: HomeLayout, 
          indexRoute: Home, 
          childRoutes: [ 
           LoginRoute(store), 
           LogoutRoute(store), 
           SignupRoute(store) 
          ] 
          }, { 
          path: '/dashboard', 
          component: requireAuthentication(DashboardLayout), 
          indexRoute: Dashboard, 
          childRoutes: [ 
           DeviceRoute(store), 
           UserRoute(store), 
           { 
           path: 'types', 
           indexRoute: TypeListRoute(store), 
           childRoutes: [ 
            TypeDetailsRoute(store) 
           ] 
           } 
          ] 
          }] 
      }) 
      

      createRoutesの方法で

      const routes = createRoutes(store) 
      <Router history={browserHistory} children={routes} /> 
      

      のように見えます

      export class DashboardLayout extends React.Component { 
          constructor (props) { 
          super(props) 
          this.children = props.children 
          } 
      
          render() { 
          return ( 
           <Layout theme={drawerTheme}> 
           <NavDrawer pinned >...</NavDrawer> 
           <Panel> 
            {this.children} 
           </Panel> 
           </Layout> 
          ) 
          } 
      } 
      

      TypeListRouteは見えTypeContainerが返さ

      export const TypeListRoute = store => ({ 
          getComponent (nextState, cb) { 
          require.ensure([], (require) => { 
           const Type = require('./containers/TypeContainer').default 
      
           const reducer = require('./modules/type').default 
      
           injectReducer(store, { key: 'type', reducer }) 
      
           cb(null, Type) 
          }, 'type') 
          } 
      }) 
      

      等からTable(Reduxのストアに)接続された「

      TypeDetailsRoute

      が全く同じであるtoolbox`反応し、私はパスを指定

      ここでTypeDetailsContainer返すものTableとはまったく異なっています。あなたはこれを実現するためにLinkコンポーネントを使用することができます私は簡単なh1にしようと、私はまだエラーに

    +0

    私はあなたが非同期レデューサーをロードし、おそらく 'ストアを使用している参照してください。replaceReducer'である。それはうまくいくのですか?私は似たような行動を見たことがあります。減速装置の交換が間違っていて、コンソールに何らかのエラーが発生したため、ルートは変更されますが、新しいページは表示されません。 :) –

    +0

    うまくいくようです。それは他のルートと一緒に働いていて、コンソールに単一のエラーはありません。 – ThomasThiebaud

    +0

    プロジェクト全体のgithubリンクがありますか? –

    答えて

    0

    私はそれを解決しました!

    createRoutesの方法では、childRoutesのルートを非同期バージョンgetChildRoutesで変更する必要があります。

    のでcreateRoutes方法になる(TypeRouteTypeListRouteTypeDetailRouteの両方を再編成)

    export const createRoutes = store => ({ 
        getChildRoutes (nextState, cb) { 
        cb(null, [{ 
         path: '/', 
         component: HomeLayout, 
         indexRoute: Home, 
         childRoutes: [ 
         LoginRoute(store), 
         LogoutRoute(store), 
         SignupRoute(store) 
         ] 
        }, { 
         path: '/dashboard', 
         component: requireAuthentication(DashboardLayout), 
         indexRoute: Dashboard, 
         childRoutes: [ 
         DeviceRoute(store), 
         UserRoute(store), 
         TypeRoute(store) 
         ] 
        }]) 
        } 
    }) 
    
    2

    を持っている:

    import { Link } from 'react-router' 
    
    ... 
    
    <Link to={`/dashboard/types/${this.props.types[index].id}`}>Dashboard page</Link> 
    
    +0

    私は 'react-toolbox''テーブル 'コンポーネントを使用していますので、' 'リンク。呼び出すことのできる同等のメソッドはありますか? – ThomasThiebaud

    +0

    'Link'コンポーネントも' push'メソッドを使っているようです([sources](https://github.com/ReactTraining/react-router/blob/master/modules/Link.js)) – ThomasThiebaud

    +0

    @ThomasThiebaud ''からレンダリングされているコンポーネントを使って質問を更新できますか? URLが変更されているがページが視覚的に更新されていない場合、Reactは「何も変更されておらず、再レンダリングする必要もない」と言っている可能性が高いです。だから私はそれがルートとは関係ないと思う(あなたの方法はうまくいくはずです)。 –

    関連する問題