From 1a2788be63971e67be2dc2b68d5b7fbb485befb6 Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Tue, 18 Nov 2014 12:52:25 +0100 Subject: [PATCH] [fixed] Don't record scroll position when replacing route Scroll position should only be recorded for PUSH and POP actions. There is no point in saving it if the item is replaced in browser history. --- modules/components/Routes.js | 2 +- modules/mixins/ScrollContext.js | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/modules/components/Routes.js b/modules/components/Routes.js index 2d92d3d358..ea73f4931d 100644 --- a/modules/components/Routes.js +++ b/modules/components/Routes.js @@ -279,7 +279,7 @@ var Routes = React.createClass({ return; // Nothing to do! if (this.state.path) - this.recordScroll(this.state.path); + this.recordScroll(this.state.path, actionType); this.dispatch(path, function (error, abortReason, nextState) { if (error) { diff --git a/modules/mixins/ScrollContext.js b/modules/mixins/ScrollContext.js index 3977081041..6ace39bfd1 100644 --- a/modules/mixins/ScrollContext.js +++ b/modules/mixins/ScrollContext.js @@ -3,6 +3,7 @@ var invariant = require('react/lib/invariant'); var canUseDOM = require('react/lib/ExecutionEnvironment').canUseDOM; var ImitateBrowserBehavior = require('../behaviors/ImitateBrowserBehavior'); var ScrollToTopBehavior = require('../behaviors/ScrollToTopBehavior'); +var LocationActions = require('../actions/LocationActions'); function getWindowScrollPosition() { invariant( @@ -53,9 +54,11 @@ var ScrollContext = { ); }, - recordScroll: function (path) { - var positions = this.getScrollPositions(); - positions[path] = getWindowScrollPosition(); + recordScroll: function (path, actionType) { + if (actionType !== LocationActions.REPLACE) { + var positions = this.getScrollPositions(); + positions[path] = getWindowScrollPosition(); + } }, updateScroll: function (path, actionType) {