examples: add 6 new over-engineering survivors + platform-native guide (#109)
New examples (examples/): - modal-dialog: <dialog> vs Radix/react-modal - url-params: URLSearchParams vs query-string - number-formatting: Intl.NumberFormat vs numeral - infinite-scroll: IntersectionObserver vs react-infinite-scroll-component - deep-clone: structuredClone vs lodash.cloneDeep / JSON hack - group-by: Object.groupBy vs lodash.groupBy New doc (docs/platform-native.md): Comprehensive reference of platform-native solutions across HTML elements, CSS, Browser APIs, Node.js stdlib, Python stdlib, and database features. Covers 60+ cases where the platform already has what developers reach for a package to do.
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
# URL Parameters
|
||||
|
||||
**Task:** "Parse and build URL query strings."
|
||||
|
||||
## Without Ponytail
|
||||
|
||||
```bash
|
||||
npm install query-string
|
||||
# 4.5 kB gzipped, 3.5M downloads/week
|
||||
```
|
||||
|
||||
```js
|
||||
import qs from "query-string";
|
||||
|
||||
// Parse
|
||||
const params = qs.parse(location.search);
|
||||
// → { page: "2", sort: "name", tags: ["js", "css"] }
|
||||
|
||||
// Build
|
||||
const url = qs.stringify({ page: 2, sort: "name", tags: ["js", "css"] });
|
||||
// → "page=2&sort=name&tags=js&tags=css"
|
||||
```
|
||||
|
||||
## With Ponytail
|
||||
|
||||
```js
|
||||
// ponytail: URLSearchParams does this
|
||||
const params = new URLSearchParams(location.search);
|
||||
|
||||
// Read
|
||||
params.get("page"); // "2"
|
||||
params.getAll("tags"); // ["js", "css"]
|
||||
|
||||
// Build
|
||||
const out = new URLSearchParams({ page: 2, sort: "name" });
|
||||
out.append("tags", "js");
|
||||
out.append("tags", "css");
|
||||
out.toString(); // "page=2&sort=name&tags=js&tags=css"
|
||||
```
|
||||
|
||||
**1 dependency → 0 dependencies.** `URLSearchParams` is in every browser and in Node.js since v10. It handles encoding, repeated keys, and iteration. The package was a polyfill for an API that has shipped everywhere for years.
|
||||
Reference in New Issue
Block a user