No matter if you work with JavaScript at client or server side, at some point youβll need to work with urls and its query params.
As example, Iβm currently using react-router in my project, which is an great tool. I can define dynamic routes with path params and easily react-router returns me these params within the match
variable and the rest of url information in the location
variable, but how can I easily access to query params?
There are great libraries for this purpose -like query-string or qs- but the question is: why increase in some more bytes the size of your package when there is a native solution? π The URLSearchParams
.
Detect feature support
As all native implementation remember the support depends on the browser version. See compatibilities here. We can check it with:
if (window.'URLSearchParams') {
// Support :)
}
Construct an instance
The most typical usage is to build an URLSearchParams
instance from a query string. Note it is also valid to pass a string that start with ?
, the URLSearchParams
will strip it out:
const params = new URLSearchParams("version=1&name=john&lastname=nieve");
// or
const params = new URLSearchParams("?version=1&name=john&lastname=nieve");
π€ Be aware to not pass string url! Or it will be interpreted as the parameter name. For example, given:
const params = new URLSearchParams("https://some_api.com?paramA=valueA");
Youβll get the three parameters named:
https://some_api.com?paramA
with valuevalueA
.
Working with params
Once we have an instance it is easy to get or set the parameters values:
params.get("version"); // 1
params.get("name"); // john
params.get("name"); // john
params.set("lastname", "stark");
params.get("lastname"); // stark
params.has("lastname"); // true
params.has("age"); // false
We can also add new parameters and work with array parameters:
params.set("tags", "bastard");
params.append("tags", "lord");
params.get("tags"); // bastard
params.getAll("tags"); // ['bastard', 'lord']
Note the difference between
get
andgetAll
when working with array parameters.
Or simply delete params:
params.delete("lastname");
Finally we can convert the URLSearchParams
back into a string with the:
params.toString(); // version=1&name=john&tags=bastard&tags=lord
Working with URLs
If we have an URL string the easy way to get the params is using the URL
object:
const url = new URL("https://got-api.com?version=1&name=john&lastname=nieve");
const params = new URLSearchParams(url.search);
params.toString(); // version=1&name=john&lastname=nieve