scrimba
Advanced React
React Router
Merging search params with the setSearchParams function
Go Pro!Bootcamp

Bootcamp

Study group

Collaborate with peers in your dedicated #study-group channel.

Code reviews

Submit projects for review using the /review command in your #code-reviews channel

To see this lesson you need to be logged in. Joining Scrimba is free and gives you access to 20+ courses.Sign up
Merging search params with the setSearchParams function
AboutCommentsNotes
Merging search params with the setSearchParams function
Expand for more info
index.jsx
run
preview
console
import React from "react";
import ReactDOM from "react-dom/client";
import { BrowserRouter, Routes, Route, Link, useSearchParams } from "react-router-dom";

const swCharacters = [
{ name: "Luke Skywalker", type: "Jedi" },
{ name: "Darth Vader", type: "Sith" },
{ name: "Emperor Palpatine", type: "Sith" },
{ name: "Yoda", type: "Jedi" }
]

function HomePage() {
const [searchParams, setSearchParams] = useSearchParams()
const typeFilter = searchParams.get("type")

const displayedCharacters = typeFilter
? swCharacters.filter(char => char.type.toLowerCase() === typeFilter)
: swCharacters

const charEls = displayedCharacters
.map(char => (
<div key={char.name}>
<h3
style={{ color: char.type.toLowerCase() === "jedi" ? "blue" : "red" }}
>
Name: {char.name}
</h3>
<p>Type: {char.type}</p>
<hr />
</div>
))

function genNewSearchParamString(key, value) {
const sp = new URLSearchParams(searchParams)
if (value === null) {
sp.delete(key)
} else {
sp.set(key, value)
}
return `?${sp.toString()}`
}

return (
<main>
<h2>Home</h2>
<div>
<Link to={genNewSearchParamString("type", "jedi")}>Jedi</Link>
<Link to={genNewSearchParamString("type", "sith")}>Sith</Link>
<Link to={genNewSearchParamString("type", null)}>Clear</Link>
</div>
<div>
<button onClick={() => setSearchParams({ type: "jedi" })}>Jedi</button>
<button onClick={() => setSearchParams({ type: "sith" })}>Sith</button>
<button onClick={() => setSearchParams({})}>Clear</button>
</div>
<hr />
{charEls}
</main>
);
}

function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/characters" element={<HomePage />} />
</Routes>
</BrowserRouter>
)
}

ReactDOM.createRoot(document.getElementById("root")).render(<App />)
Console
/characters?name=bob
-5:19