Как получить доступ к строковым значениям запроса URL в маршрутизаторе react с помощью Redux

#javascript #reactjs #redux #react-router #isomorphic-javascript

#javascript #reactjs #redux #react-маршрутизатор #изоморфный-javascript

Вопрос:

У меня есть URL, как показано ниже, с различными значениями строки запроса.

 http://localhost:3000/product/?id=123amp;name=test
  

Я работаю над изоморфным приложением, используя redux, react. Итак, я запускаю действие, и могу ли я узнать, как я могу получить эти строковые значения запроса в файл действия redux?

 export function getProductData(params) {

  debug('Action Requested:'   params);  

  return {
    type:    GET_PRODUCT_DATA,
    promise: request.get(API_URL   params.productId)
  }
};
  

Потому что в действии я запускаю вызов API, и мне нужен этот идентификатор из значения строки запроса.

Комментарии:

1. Если вам нужно использовать ответ в действии, тогда отправка в обратном вызове ajax не выполняет обещание в действии. Но я не знаю, хотите ли вы это сделать.

2. Это изоморфное приложение, использующее это github.com/bananaoomarang/isomorphic-redux/tree/tutorial

3. Мой вопрос в том, как получить доступ к значениям строки запроса? если URL-адрес похож на localhost:3000/product/1234, он работает так, как мы кодируем в маршрутизаторе, например /product/:productid

Ответ №1:

Если вы используете React-router, продолжайте и получите к ним доступ через props.location.query

В конечном итоге будет выглядеть примерно так:

 const Product = (props) =>
  <div>
     <button onClick={e => props.getProductData(props.location.query)}>Do Some Action</button>
  </div>;
  

Ответ №2:

Параметры из URL-адреса в соответствии с вашими маршрутами передаются компоненту с помощью props.params so, если у вас есть такие маршруты, как

 <Route path="/product/:productid" component={Product} />
  

вы можете получить доступ к productid из Product компонента, используя props, и передать его своему действию:

 const Product = (props) =>
  <div>
     <button onClick={e => props.getProductData(props.params)}>Do Some Action</button>
  </div>;
  

где props.params хранятся все параметры, которые вы определяете в маршруте. в нашем случае значение productid будет in props.params.productid .

Комментарии:

1. является ли querystring также частью этого? если у вас есть только /product/, а URL-адрес отображается как /product/?id=1234

2. Этот ответ не затрагивает вопрос. Вообще не упоминается использование строки запроса.