Как убрать лишний знак вопроса в url перед / ,используя React Router?

Есть компонент Courses, в нем реализован функционал выбора сортировки курсов в выпадающем меню, далее если нажать на кнопку "Press me" - выбранный метод сортировки добавляется в url. Как пример, правильный переход должен выглядеть так: http://localhost:3000/courses/?sort=title, но у меня почему-то есть лишний введите сюда описание изображениязнак вопроса после courses http://localhost:3000/courses?/?sort=title

import { Link, useLocation } from 'react-router-dom'
import queryString from 'query-string'
/* queryString -  это объект и у него есть метод parse и в вызове этого метода мы должны передатьт поле search и на выходе получим объект с свойством sort и значчением id (как пример) */
import courses from '../data/courses'
import { useState, useEffect } from 'react'
import { useNavigate } from 'react-router-dom'

const SORT_KEYS = ['title', 'slug', 'id']

function sortCourses(courses, key) {
  /* если мы не задаем сортировку, то останавливаем выпонение фкнкции */
  const sortedCourses = [...courses]
  if (!key || !SORT_KEYS.includes(key)) {
    return sortedCourses
  }
  /* Функция для сортировки массива key - это строка либо title, slug, id. Метод sort ожидает числовое значение  */
  sortedCourses.sort((a, b) => (a[key] > b[key] ? 1 : -1))
  return sortedCourses
}

const Courses = () => {
  /* -----------Место для хуков------------------- */
  const location = useLocation()
  console.log(location)
  const query = queryString.parse(location.search)

  /* соятоение для распарсенного значения поле sort */
  const [sortKey, setSortKey] = useState(query.sort)

  /* ------------------------------------------------------------------------ */
  const [sortMethod, setSortMethod] = useState('')
  const navigate2 = useNavigate()
  /* функция для двухстороннего связывания */
  function helper(e) {
    const selectedSortMethod = e.target.value
    setSortMethod(selectedSortMethod)
  }

  const sendSubmit = () => {
    // navigate(`/?sort=${sortMethod}`, { relative: 'path' })
    navigate({
      // pathname: '/',
      // relative: 'path',
      search: `/?sort=${sortMethod}`,
    })
  }

  /* --------------------------------------------------------------------------- */

  /* состояние для выбора сортировки из меню------------------------ */

  /* состояние для отсортированного массива и  вызываем функцию, которая возвращает отсортированный массив */
  const [sortedCourses, setSortedCourses] = useState(
    sortCourses(courses, sortKey)
  )

  const navigate = useNavigate()
  // console.log(navigate)

  useEffect(() => {
    if (!SORT_KEYS.includes(sortKey)) {
      // navigate('.')
      setSortKey()
      setSortedCourses([...courses])
    }
  }, [navigate, sortKey])

  // console.log(sortKey)
  return (
    <div>
      <h1>{sortKey ? `Courses sorted by ${sortKey}` : 'Courses'}</h1>
      <select onChange={(e) => helper(e)}>
        <option> Как сортировать?</option>
        <option value="title">По title</option>
        <option value="slug">По slug</option>
        <option value="id">По id</option>
      </select>
      {sortMethod}
      <button onClick={sendSubmit}>press me</button>
      {sortedCourses.map((course) => {
        return (
          <div key={course.id}>
            <Link className="courseLink" to={course.slug}>
              {course.title}
            </Link>
          </div>
        )
      })}
    </div>
  )
}

{
}

export default Courses
**текст, выделенный жирным шрифтом**

Ответы (1 шт):

Автор решения: SwaD

Указывайте просто строку GET параметров без лишних символов:

  const sendSubmit = (sortMethod) => {
    navigate({
      search: `sort=${sortMethod}`
    });
  };

Или можно воспользоваться функцией createSearchParams() которая собирает get параметры в строку:

  const sendSubmit = (sortMethod) => {
    navigate({
      search: createSearchParams({ sort: sortMethod }).toString()
    });
  };
→ Ссылка