2017-11-01 13 views
0

私はちょうどreact-routerを拾いました。私は間違ったことをしていると確信しています。異なるルータの同じルートでリアクタルータのルートが変更されない

私は3つのリンクが同じコンポーネントを指しています。違いは、URLで渡された2つのパラメータである:私は3つのチャートのいずれかのリンクをクリックした場合

<Router> 
    <div> 
     <ul> 
     <li><Link to="/">Home</Link></li> 
     <li><Link to="/chart/0/0">Chart</Link></li> 
     <li><Link to="/chart/1/0">Chart with grid</Link></li> 
     <li><Link to="/chart/1/1">Chart with grid and axis</Link></li> 
     <li><Link to="/doesnotexist">This link does exist</Link></li> 
     </ul> 

     <hr/> 

     <Switch> 
     <Route exact path="/" component={Home}/> 
     <Route path="/chart/:grid/:axis" render={ 
      props => <Chart grid={props.match.params.grid === '1'} axis={props.match.params.axis === '1'} /> 
     }/> 
     <Route component={NoMatch}/> 
     </Switch> 
    </div> 
    </Router> 

、私は渡された右propsで、レンダリングされた右のチャートを得ます。別のグラフリンクをクリックしても何も変わりません。他のリンク(「自宅」または「存在しません」)のいずれかをクリックしてからチャートをクリックすると、適切に表示されます。明らかに、パラメータだけが変更されてもルーティングは発生しません。

ルーティングを毎回行うようにするにはどうすればよいですか、それとも間違っていますか?同じコンポーネントにパラメータ/小道具を渡すより良い方法はありますか?あなたは、例えばチャート内部の何かを更新したい場合はあなたが簡単に

const { axis, grid } = this.props.params 

を使用してチャートコンポーネント内でこのグリッド/アクセス小道具にアクセスすることができます

<Route path="/chart/:grid/:axis" component={Chart} /> 

あなたは、コードの上に簡素化することができ

答えて

0

、 CONST {軸、グリッド} = props.match.params` `へ1. componentWillReceiveProps(小道具)`の行を修正する `:ロード新しいデータソースコンポーネント

使用componentWillReceiveProps 2つの警告と仕事関数

+0

そして2.私の内部コンポーネントは 'Route'の小道具を認識しました。つまり、' match'オブジェクトを解析する必要があります。これは、再利用できないためです。したがって、 'match.params'オブジェクトだけを' props'としてコンポーネントに渡す別の方法がない限り、 'Route'に' component'ではなく 'render'を使わなければなりません。 –

関連する問題