2017-08-14 14 views
0

をルーティングに反応Iは、ルータ2と反応使用して、私は昨年始まったプロジェクトを使用していますが、これはルータ2は、ルータ2、より効率的な

const routes = (
    <Router> 
    <Route path="/" component={Home}/> 
    <Route path="about" component={About}/> 
    <Route path="work" component={Work}/> 
    <Route path="contact" component={Contact}/> 
    <Route path="project/:project" component={ProjectPage}/> 
    <Route path="tictactoe/demo" component={TicTacToePage}/> 
    <Route path="blog/:blogid" component={BlogPage}/> 
    <Route path="*" component={NotFoundPage}/> 
    </Router> 
); 

export default routes; 

プロジェクトページの詳細は、それぞれに反応使用してルーティングするための私の現在の設定ですサーバー上のJSONに保存され、次のように私のプロジェクトページがあるされています

class App extends Component { 
    render() { 
    const url = this.props.routeParams.project; 
    const Project = Data.find(page => page.name === url); 
    if (Project !== undefined) { 
     return (
     <Layout> 
      <div className="page-container"> 
      <h1> { Project.title } </h1> 
      </div> 
     </Layout> 
    ) 
    } else { 
     return (
     <Layout> 
      <NotFoundPage /> 
     </Layout> 
    ) 
    } 
    } 
} 

export default App; 

によるデータに必要なルックに当然のプロジェクトページをロードするとき、私は通常のロード速度より少し遅く経験しています.jsonファイル:

export const Data = [ 
    {id: 0, name: 'tictactoe', title: 'Coding an unbeatable TicTacToe opponent', demo: 'tictactoe/demo'} 
] 

これは、Reactのサーバー側に基づいたよりダイナミックなルーティングを提供する最善の方法ですか?私はReactにとって非常に新しく、これをすべて試してみようとしています!標準ページ間の変更は非常に速いですが、プロジェクトページを読み込むと白い画面が点滅します。

編集:私は私のcomponentWillMountに約束要求を追加しようとしました:

componentWillMount() { 
    const url = this.props.routeParams.project; 
    let promise = new Promise(function(resolve, reject) { 
     let response = Data.find(page => page.name === url); 
     resolve(response); 
    }).then(project => { 
     this.setState({ 
     project: project, 
     },() => { 
     console.log("Project loaded: "); 
     console.log(project.title); 
     }); 
    }); 
    } 

は、まだ私はまだ同じ白い画面のフラッシュとプロジェクトのページに同じ読み込み速度を参照してください。

+0

データが大きすぎてアプリケーションの処理速度が低下する場合、これに対して何をしたいですか? – lilezek

+0

誰かがルーティングやコンテンツを読み込むためのより良い方法を知っていたのかどうか疑問に思っていました。 – Olly

+0

データのロード中にフェードアウト効果を加えることができます。ところで、あなたのJSONファイルの大きさはどれくらいですか?あなたが公開した例は、影響を与えるのに十分な大きさではありません。 – lilezek

答えて

2

すべてのデータをフェッチしてクライアント側にフィルタリングする最良の方法とは思えません。(変数のルーティングから)ただ1つのプロジェクトをフェッチするように、(componentWillMount)約束が解決するまでローダーを表示することがあります。

+0

答えをありがとう!私はあなたが意味するものを実装しようとしましたが、何にも何も影響を与えていないようです。私はcomponentDidとWillMountの両方を試しましたが、間違っていると試している約束を確認してもらえますか? – Olly

0

誰かが同じ問題を抱えていると、タグ内の「target =」属性が原因でこの問題が発生しました。新しいタブを開くことさえせず、ページをリロードするかのように単に白く輝かせるだけでした。

問題はページではなく、ページに向かうリンクです。

関連する問題