#router.push() / router.replace() not working

4 messages · Page 1 of 1 (latest)

mellow pulsar
#

i.m using useRouter provided by next/navigation but these methods seem to do nothing

const handleSortChange = (updatedSort: string) => {
    const updatedQuery = new URLSearchParams({
      sort: updatedSort,
      season: seasonSelected,
    });

    console.log(updatedQuery.toString());
    router.replace(`${path}?${updatedQuery.toString()}`); // does nothing
    window.location.replace(`${path}?${updatedQuery.toString()}`); // works
  };

  const handleSeasonChange = (updatedS: string) => {
    const updatedQuery = new URLSearchParams({
      sort: sortSelected,
      season: updatedS,
    });

    console.log(updatedQuery.toString());
    router.replace(`${path}?${updatedQuery.toString()}`); // does nothing
    window.location.replace(`${path}?${updatedQuery.toString()}`); // works
  };

am i doing something wrong?

lofty pulsarBOT
#

🔎 This post has been indexed in our web forum and will be seen by search engines so other users can find it outside Discord

      🕵️ Your user profile is private by default and won't be visible to users outside Discord, if you want to be visible in the web forum you can add the "Public Profile" role in <id:customize>

      ✅ You can mark a message as the answer for your post with `Right click -> Apps -> Mark Solution`
      (if you don't see the option, try refreshing Discord with Ctrl + R)
mellow pulsar
#

complete component

const FilterComponent: FC<FilterComponentProps> = ({ sort, season }) => {
  const [sortSelected, setSortSelected] = useState(
    sortOptions.find((option) => option.value === sort)?.value || sortOptions[0].value,
  );
  const [seasonSelected, setSeasonSelected] = useState(
    seasonOptions.find((option) => option.value === season)?.value || seasonOptions[0].value,
  );

  const router = useRouter();
  const path = usePathname();
  const searchParams = useSearchParams();

  const createQueryString = useCallback(
    (name: string, value: string) => {
      const params = new URLSearchParams(searchParams as unknown as URLSearchParams);
      params.set(name, value);

      return params.toString();
    },
    [searchParams],
  );

  const handleSortChange = useCallback(
    (newSort: string) => {
      setSortSelected(newSort);

      const params = createQueryString('sort', newSort);
      router.push(`${path}?${params.toString()}`);
    },
    [createQueryString, path, router],
  );

  const handleSeasonChange = useCallback(
    (newSeason: string) => {
      setSeasonSelected(newSeason);

      const params = createQueryString('season', newSeason);
      router.push(`${path}?${params.toString()}`);
    },
    [createQueryString, path, router],
  );

  useEffect(() => {
    handleSortChange(sortSelected);
  }, [sortSelected]);

  useEffect(() => {
    handleSeasonChange(seasonSelected);
  }, [seasonSelected]);

  return (
    // ...
  );
};
mellow pulsar
#

It was an error on my end where the useEffect hook had a dependency that was being updated each render making page go into loops, error itself was actually not in the code I provided but another custom hook usePaginatedQuery sorry!