Reputation: 881
Hello I have question how can I get current path of app with search params and look for its updates. For example I have localhost3000/?filter=breakfastdinner
and I want to go back to localhost3000/?filter=breakfast
. I want to wait for URL updates to use useEffect.
useEffect(() => {
for (let i = 0; i <= recipeTypesArray.length - 1; i++) {
if (searchParams.get("filter")?.includes(recipeTypesArray[i])) {
dispatch(
recipeAction.addFilters({
content: recipeTypesArray[i],
filterName: "filterTypes",
})
);
}
if (!searchParams.get("filter")?.includes(recipeTypesArray[i])) {
dispatch(
recipeAction.removeFilters({
content: recipeTypesArray[i],
filterName: "filterTypes",
})
);
}
}
initial = false;
console.log(chosenFiltersTypes);
}, []);
Upvotes: 0
Views: 3079
Reputation: 14985
Use useLocation()
hook.
const { hash, pathname, search } = useLocation();
Upvotes: 2
Reputation: 3339
What about using useRouter();
and pass the route in the useEffect deps, something like:
const { asPath } = useRouter(); // asPath or whatever from the router
useEffect(() => {
for (let i = 0; i <= recipeTypesArray.length - 1; i++) {
if (searchParams.get("filter")?.includes(recipeTypesArray[i])) {
dispatch(
recipeAction.addFilters({
content: recipeTypesArray[i],
filterName: "filterTypes",
})
);
}
if (!searchParams.get("filter")?.includes(recipeTypesArray[i])) {
dispatch(
recipeAction.removeFilters({
content: recipeTypesArray[i],
filterName: "filterTypes",
})
);
}
}
initial = false;
console.log(chosenFiltersTypes);
}, [asPath]);
Edit:
For react-router how about these hooks (based on your goal)?
useHistory
useLocation
useParams
useRouteMatch
I think all of them are supported in v6 too.
https://v5.reactrouter.com/web/api/Hooks
Upvotes: 1