History | InstantSearch.js V3 (Deprecated)
This version of InstantSearch.js has been deprecated in favor of the latest version of InstantSearch.js.
Signature
instantsearch.routers.history({ // Optional parameters windowTitle: function, createURL: function, parseURL: function, writeDelay: number, });
About this widget
The history
router is the one used by default within instantsearch
.
The router provides an API that lets you customize some of its behaviors. To get a sense of what you can do with the API, checkout our dedicated guide on Routing URLs.
Examples
1
2
3
4
5
6
instantsearch({
// ...
routing: {
router: instantsearch.routers.history(),
},
});
Options
windowTitle
This function lets you dynamically customize the window title based on the provided routeState
. It’s called every time the user refines the UI and the history timer completes.
1
2
3
4
5
6
7
8
9
instantsearch.routers.history({
windowTitle(routeState) {
if (!routeState.query) {
return 'MyWebsite - Results page'
}
return `MyWebsite - Results for: ${routeState.query}`
},
});
createURL
This function lets you directly change the format of URLs that are created and rendered for the browser URL bar or widgets. It’s called every time instantsearch
needs to create a URL. The provided options are:
qsModule
(object): a query string that parses and stringifies modules. You can get more information from the qsModule documentation.location
(object): an alias towindow.location
.routeState
(objec): therouteState
created by the providedstateMapping
. When absent, this is an untoucheduiState
.
1
2
3
4
5
6
7
8
9
10
11
12
instantsearch.routers.history({
createURL({ qsModule, location, routeState }) {
const { origin, pathname, hash } = location;
const queryString = qsModule.stringify(routeState);
if (!routeState.query) {
return `${origin}${pathname}${hash}`;
}
return `${origin}${pathname}?${queryString}${hash}`;
},
});
parseURL
This function is responsible for parsing the URL string back into a routeState
. It must be customized if you customized the createURL
function. It’s called every time a user loads or reloads a page, or when they click on the back or next buttons of the browser. The provided options are:
qsModule
(object): a query string that parses and stringifies modules. You can get more information from the qsModule documentation.location
(function): an alias towindow.location
.
1
2
3
4
5
instantsearch.routers.history({
createURL({ qsModule, location }) {
return return qsModule.parse(location.search.slice(1));
},
});
writeDelay
This option controls the number of milliseconds the router waits before writing the new URL to the browser. You can think about it this way: “400ms after the last user action, the URL is pushed to the browser”. This helps reduce:
- The number of different history entries. If you type “phone”, you don’t want to have 5 history entries and thus have to click 5 times on the back button to go back to the previous search state
- The performance overhead of updating the browser URL too often. There are recurring but hard to track performance issues associated with updating the browser URL too often: these issues result from browser extensions reacting to every change.
400ms is a typically a pretty good writeDelay
.
1
2
3
instantsearch.routers.history({
writeDelay: 400,
});