History | InstantSearch.js V3 (Deprecated)
This version of InstantSearch.js has been deprecated in favor of the latest version of InstantSearch.js.
Signature# A
instantsearch.routers.history({ // Optional parameters windowTitle: function, createURL: function, parseURL: function, writeDelay: number, });
About this widget# A
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# A
1
2
3
4
5
6
instantsearch({
// ...
routing: {
router: instantsearch.routers.history(),
},
});
Options# A
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
.