2017-10-21 12 views
3

あるページから別のページに移動するときに、ユーザーが自動的に上に移動するようにします。つまり、scrollTo(0, 0)です。スイッチ(反応ルータ)を使用している場合は上にスクロール

react-routerdocs on scroll restorationによれば、推奨する方法は、コンポーネントScrollToTopをセットアップし、これにルートをラップすることです。

これはうまく機能およびコンポーネントをSwitch構成要素内に配置されている場合、ユーザは、ScrollToTopコンポーネント内にネストされた任意の経路の上部にスクロールされている間、Switchはもはやスイッチのように機能しません。最初のルートの代わりに一致するすべてのルートをレンダリングすることを意味します。

また、Switchの外側にScrollToTopを置くと、ユーザーは上部にスクロールしなくなります。

バージョン:react-router-v4

答えて

1

私は上記の場合、それはscrollTo(0,0)

<Router onUpdate={() => window.scrollTo(0, 0)} history={createBrowserHistory()}> 
    ... 
</Router 

にユーザーがかかります更新されたなかった場合は常に動作しませんどのような同じ問題を持っていた:

react-router-v4scroll Restoration

これはsですそれをルータの小道具へのアクセス権を与えることをwithRouterでそれをラップすることを確認し、すべてのナビゲーション上のウィンドウをスクロールアップするコンポーネントで処理するtraightforward:

componentDidUpdate(prevProps) { 
    if (this.props.location !== prevProps.location) { 
     window.scrollTo(0, 0) 
    } 
    } 

    render() { 
    return this.props.children 
    } 
} 

次に、あなたのアプリの上でそれをレンダリングしますが、 (上記のコード ルータ

の下
const App =() => (
    <Router> 
    <ScrollToTop> 
     <App/> 
    </ScrollToTop> 
    </Router> 
) 

がリアクト・ルータをweb guides

+0

これはv4で動作しますか? –

+0

onUpdateはv4で動作しません。私は別のソリューションで更新しました – Aaqib

+0

他のソリューションは私のオリジナルポストで説明したように私の経験からスイッチでは動作しません。 –

4

からコピーされた私は、特にスクロールについてはよく分からないが、あなたはこれを行う簡単な方法でもよいbrowserHistoryにリスナーを添付することができます私はしません )V4とonUpdate作品だと思う:

const browserHistory = createBrowserHistory(); 

browserHistory.listen((location, action) => { 
    window.scrollTo(0, 0); 
}); 

<Router history={browserHistory} /> 
+0

ありがとう!これはまさに私が必要としていたものです。 – Yuschick

1

私はreact-router-v4スクロール復元を使用してこの問題を解決するために管理し、Switchの外ScrollToTopを置きます。また、withRouterを使用することを忘れないでください。そうしないと動作しません。

+1

ちょっと私のスクロールの復元を使用するために私のポストで提案した 'withRouter'と、幸いその解決を知って – Aaqib

+0

私の問題はあなたが含まれていなかった 'Switch'でした。しかし、今はすべて良いです、ありがとう。 –

関連する問題