2017-09-15 8 views
1

私は、反応アプリケーションと反応ルータ3.0.0バージョンをルーティングするためにcreate-react-appボイラープレートを使用しています。反応ルータv3を使用したcreate-react-appでのコード分割

私は、必要なときに基本的にコード分割を行うためにコンポーネントをロードしたかったのです。

ユーザースプリットを行う方法がわからないので固執しています。特定のルートの役割を持っていないユーザーの場合は、ユーザーの役割を確認するHOCが1つあります。無許可のルート。

コンポーネントを読み込む前に呼び出す必要があるonEnter関数もあります。これは、ユーザートークンが期限切れかどうかをチェックします。トークンが期限切れになっていると、ユーザーをログインページにリダイレクトしています。

だから、誰かがこのシナリオでコードの分割を手伝ってくれたら助かります。

以下

は私Route.jsファイル

 <Route path="/" component={App}> 
     <IndexRoute onEnter={this.handleLoginRedirect} component={Login} /> 
     <Route path="/" component={Layout} onEnter={this.handleRouteEnter} onChange={this.handleRouteChange}> 
      <Route path="admin" component={Authorization(Admin, Constant.AdminAuthorizeRoles, '/unauthorised')}> 
      <Route path=":mode/:id" component={Admin}> 
       <Route exact path=":subMode" component={Admin}/> 
      </Route> 
      </Route> 
      <Route path="admin-summary" component={Authorization(AdminOrderSummary, Constant.AdminAuthorizeRoles, '/unauthorised')}/> 
      <Route path="user-profile" component={Authorization(Profile, Constant.userProfileAuthorizeRole, '/unauthorised')}/> 
      <Route path="new-user" component={Authorization(NewUser, Constant.createNewUserProfileAuthorizeRole, '/unauthorised')}/> 
      <Route path="/unauthorised" component={UnAuthorisation}/> 
     </Route> 
     <Route path="/logout" component={Logout}/> 
     </Route> 
+0

がありますあなたが使う理由ルータv3はv4ではありませんか?あなたの作成反応型アプリのバージョンは何ですか? – mradziwon

+0

私はこのプロジェクトをしばらく開発しており、v3からv4への移行は難しいです。私のcreate-react-appバージョンは1.0.2です – gaurav

+0

動的インポート機能でコードを分割しようとしましたか? – mradziwon

答えて

0

である(以降1.0から)CRAで作成したアプリのコード分割を実装するための最も簡単な方法は、dynamic import featureを使用することです。コード分​​割用にはtutorialがすばらしく、反応ルータv4用ですので、少し変更する必要があります。動的インポートおよび非同期コンポーネントラッパーで

/* Import the components */ 
import Home from "./containers/Home"; 

/* Use components to define routes */ 
export default() => 
    <Switch> 
    <Route path="/" exact component={Home} /> 
    </Switch>; 

によって使用される通常の構造は、ルータに反応

asyncComponent:

import React, { Component } from "react"; 

export default function asyncComponent(importComponent) { 
    class AsyncComponent extends Component { 
    constructor(props) { 
     super(props); 

     this.state = { 
     component: null 
     }; 
    } 

    async componentDidMount() { 
     const { default: component } = await importComponent(); 

     this.setState({ 
     component: component 
     }); 
    } 

    render() { 
     const C = this.state.component; 

     return C ? <C {...this.props} /> : null; 
    } 
    } 

    return AsyncComponent; 
} 

ルート:

import asyncComponent from "./components/AsyncComponent"; 
const AsyncHome = asyncComponent(() => import("./containers/Home")); 

export default() => 
    <Switch> 
    <Route path="/" exact component={AsyncHome} /> 
    </Switch>; 
+0

は、反応ルータv3でコード分割を行う方法を示すことができます....反応ルータをv4に更新するのが難しいため.... – gaurav

関連する問題