Debounce history updates
authorGreg Hurrell <greg@hurrell.net>
Tue, 4 Aug 2015 06:20:23 +0000 (23:20 -0700)
committerGreg Hurrell <greg@hurrell.net>
Tue, 4 Aug 2015 06:20:23 +0000 (23:20 -0700)
Because they're slow.

src/App.js

index b3ff45d9530041ce26be2d449507ca973975449f..b8b347059c70ce61f4c22a61b09806e91d9f48bd 100644 (file)
@@ -15,11 +15,21 @@ import Field from './Field.react';
 import Label from './Label.react';
 import Size from './Size.react';
 import convert from './convert';
+import debounce from './debounce';
 
 import './App.css';
 
 const SERIALIZATION_BASE = DIGITS.length;
 
+const replaceHistoryState = debounce(
+  value => window.history.replaceState(
+    {},
+    '',
+    '#' + convert(value.value, value.base, SERIALIZATION_BASE)
+  ),
+  500
+);
+
 function getInitialValue() {
   // Extract value from URL fragment, if present.
   const value = window.location.hash.replace(/^#/, '');
@@ -44,11 +54,7 @@ export default class App extends React.Component {
 
   _onValueChange = (value: Value) => {
     this.setState({value});
-    window.history.replaceState(
-      {},
-      '',
-      '#' + convert(value.value, value.base, SERIALIZATION_BASE)
-    );
+    replaceHistoryState(value);
   }
 
   componentDidMount() {