Переадресация в ответном маршрутизаторе
Я пытаюсь установить маршрут маршрута с помощью строки запроса. Что-то в строках:
www.mywebsite.com/results?query1=:query1&query2=:query2&query3=:query3
Я бы перешел к компоненту "Результаты" следующим образом:
<Route path="/" component={Main}>
<IndexRoute component={Home} />
<Route path="results?query1=:query1&query2=:query2&query3=:query3"
component={SearchResults} />
</Route>
В контейнере SearchResults я бы хотел иметь доступ к параметрам query1, query2 и query3.
Я не смог заставить его работать. Я получаю следующую ошибку:
bundle.js: 22627 Внимание: [реактивный маршрутизатор] Местоположение "/results? query1 = 1 & query2 = 2 & query3 = 3" не соответствует маршрутам
Я попытался выполнить следующие шаги в следующем руководстве: (Раздел: Как насчет параметров строки запроса?)
https://www.themarketingtechnologist.co/react-router-an-introduction/
Могу ли я получить помощь здесь?
Ответы
Ответ 1
Если вы используете React Router v2.xx, вы можете получить доступ к параметрам запроса через объект location.query
, переданный вашему компоненту Route.
Другими словами, вы можете переработать свой маршрут, чтобы выглядеть следующим образом:
<Route path="results" component={SearchResults} />
И затем внутри вашего компонента SearchResults
используйте this.props.location.query.query1
(аналогично для query2
и query3
) для доступа к значениям параметров запроса.
EDIT: Это все еще имеет место для React Router v3.xx.
Ответ 2
Если вы используете React Router >= v4 location.query
больше не доступен. Вы можете подключить внешнюю библиотеку (например, https://www.npmjs.com/package/query-string) или использовать что-то вроде этого:
const search = props.location.search; // could be '?foo=bar'
const params = new URLSearchParams(search);
const foo = params.get('foo'); // bar
(просто имейте в виду, что URLSearchParams()
не поддерживается в Internet Explorer)