Как добавить несколько слешей в формате 1 :id?

Я мигрировал проект на React 18 и react-router-dom 6.29.0, но столкнулся с проблемой маршрутизации. Ранее я использовал маршрут вида /guide/:categories*/article/:articleId, и на странице site.ru/guide/28/29/38/39/40/article/103 значение categories было "28/29/38/39/40". Однако теперь, при использовании react-router-dom 6.29.0, categories равно "28". Как можно реализовать мультислешевые параметры в react-router-dom 6.29.0?
  • 29 марта 2025 г. 8:34
Ответы на вопрос 2
В `react-router-dom` 6.x, для того чтобы передать несколько значений через параметр маршрута, можно использовать символ слэша `/` в качестве разделителя, но для этого нужно немного изменить способ маршрутизации и обработки параметров.

Ваша первоначальная строка маршрута `/guide/:categories*/article/:articleId` больше не поддерживается в том же виде. Вместо этого вы можете использовать следующую стратегию:

1. **Сделайте `categories` массивом**: Вместо использования структуры, которая будет трактовать слэши как часть одного параметра, вы можете передавать категории через запятые или другой символ.

2. **Измените маршрут**: Например, вы можете изменить маршрут на следующий:

   ```javascript
   <Route path="/guide/:categories/article/:articleId" element={<YourComponent />} />
   ```

3. **Используйте `useParams` и обработайте параметры**: Когда вы получите параметры в вашем компоненте, вы можете использовать `split` для преобразования строки в массив:

   ```javascript
   import { useParams } from 'react-router-dom';

   const YourComponent = () => {
       const { categories, articleId } = useParams();
       
       // Разделение категорий по запятой
       const categoryArray = categories.split(',');

       console.log(categoryArray); // ['28', '29', '38', '39', '40']
       console.log(articleId); // '103'

       return (
           <div>
               {/* Ваш код */}
           </div>
       );
   };
   ```

4. **Формируйте ссылки**: При формировании ссылок на ваши маршруты, убедитесь, что вы используете разделитель, который вы выбрали (например, запятую).

Таким образом, фактически, вы изменяете способ передачи информации через параметры маршрута, чтобы соответствовать новому синтаксису и возможностям `react-router-dom` версии 6.
Больше так делать нельзя: https://reactrouter.com/6.30.0/upgrading/v5#note-o...
Похожие вопросы