2017-11-21 15 views
3

私の目標は、「戻る」ボタンを有効にすることですが、ユーザーが戻ってくるルート/パスが特定のカテゴリにある場合のみです。goBack()の前に履歴をチェックするv4

もっと正確には私は2種類のルートを持っています:/<someContent>/graph/<graphId>です。ユーザーがグラフ間を移動すると、前のグラフに戻ることができますが、/...ルートに戻ることはできません。これが私が単にhistory.goBack()を実行することができない理由です、私は最初に場所を確認する必要があります。

const history = createHashHistory(); 
const router = (
     <ConnectedRouter history={history}> 
      <Switch> 
       <Route exact path='/' component={Home}></Route> 
       <Route exact path='/extension' component={Home}></Route> 
       <Route exact path='/settings' component={Home}></Route> 
       <Route exact path='/about' component={Home}></Route> 
       <Route exact path='/search' component={Home}></Route> 
       <Route exact path='/contact' component={Home}></Route> 
       <Route path='/graph/:entityId' component={Graph}></Route> 
      </Switch> 
     </ConnectedRouter> 
); 

私はGraphコンポーネントにこのような何かを実装したい:私は適用できない場合は、「進む」ボタンを無効にしたいよう

if (this.props.history.previousLocation().indexOf('graph') > -1){ 
    this.props.history.goBack(); 
} else { 
    this.disableReturnButton(); 
} 

この質問はまたgoForward()に適用されます。また、ユーザーはそれが少なく自然な感じ、私はそれを行う方法を知って、もちろん、私は、ユーザーが動き回るようlocalStorageまたはReduxのstoreにログインするようにサイドのトリックを使用しないようしたいと思いthis.props.history.push(newLocation)

で動き回ります。

答えて

0

Linkコンポーネントかかわらず、あるいはhistory.pushかかわらず、ナビゲートしている間は、あなたが

<Link to={{pathname: '/graph/1', state: { from: this.props.location.pathname }}} /> 

または

history.push({ 
    pathname: '/graph/1', 
    state: { 
     from: this.props.location.pathname 
    } 
}) 

のような別のRouteコンポーネントに現在の場所を渡すことができ、その後、あなただけの可能性あなたのコンポーネントのこの場所をthis.props.location.state && this.props.location.state.fromのように取得し、 'tからgoBackまで

+0

状態は何らかの形で持続されていますか?私はユーザーが前後に何度か後方に行くと、この状態は期待どおりに機能するのでしょうか? – ted

+0

いいえ、それは永続化されません、あなたはあなたが戻ったり、転送されるたびにそれを渡していることを確認する必要があります –

+0

私はローカルストレージまたはreduxストアのリストとして場所を格納するかもしれないが、感謝:) – ted