Como posso definir uma rota no meu arquivo routes.jsx para capturar o __firebase_request_key
valor do parâmetro de uma URL gerada pelo processo de logon único do Twitter após o redirecionamento de seus servidores?
http://localhost:8000/#/signin?_k=v9ifuf&__firebase_request_key=blablabla
Eu tentei com a seguinte configuração de rotas, mas o :redirectParam
não está capturando o parâmetro mencionado:
<Router>
<Route path="/" component={Main}>
<Route path="signin" component={SignIn}>
<Route path=":redirectParam" component={TwitterSsoButton} />
</Route>
</Route>
</Router>
reactjs
react-router
Franco
fonte
fonte
query strings
"? var1 = val & var2 = val2",: "url paramters
/ photos /: companyiD / new"Respostas:
React Router v3
O React Router já analisa o local e o transmite ao seu RouteComponent como acessórios. Você pode acessar a parte da consulta (depois? Na url) via
Se você estiver procurando pelos valores dos parâmetros do caminho, separados por dois pontos (:) dentro do roteador, eles podem ser acessados via
Isso se aplica às versões atrasadas do React Router v3 (não sei qual). As versões mais antigas do roteador foram relatadas para uso
this.props.params.redirectParam
.React Router v4 e React Router v5, genéricos
O React Router v4 não analisa mais a consulta, mas você pode acessá-la apenas via
this.props.location.search
. Por razões, consulte a resposta de nbeuchat .Por exemplo, com a biblioteca qs importada como
qs
você poderia fazerOutra biblioteca seria a string de consulta . Veja esta resposta para mais algumas idéias sobre a análise da string de pesquisa. Se você não precisa de compatibilidade com o IE, também pode usar
Para componentes funcionais, você substituiria
this.props.location
pelo gancho useLocation . Observe que você pode usarwindow.location.search
, mas isso não permitirá acionar a renderização do React nas alterações. Se o seu componente (não funcional) não for um filho direto deSwitch
você, será necessário usar o Router para acessar qualquer um dos acessórios fornecidos pelo roteador.Geral
sugestão de nizam.sp de fazer
será útil em qualquer caso.
fonte
console.dir()
devido à advertência nota ... pelo menos :)react-router-dom
eu tive que usarwithRouter
para fazer este trabalho!React Router v4
Usando
component
O componente é renderizado automaticamente com os props da rota.
Usando
render
Os adereços de rota são transmitidos para a função de renderização.
fonte
query params
URL atual do meu aplicativo em um componente filho usando o React Router v4. Se você estiver procurando peloquery params
, this.props.location.query no React Router 4 foi removido (atualmente usando a v4.1.1). Veja esta resposta: stackoverflow.com/a/43630848/1508105/users/?q=...
mas poderia ter/user?q=...
. Você deve usar othis.props.location.search
React Router v4 e analisar os resultados sozinho, conforme explicado na minha resposta abaixo.this.props.location.search
não existe.React Router v3
Com o React Router v3, você pode obter uma string de consulta em
this.props.location.search
(? Qs1 = naisarg & qs2 = parmar). Por exemplo, comlet params = queryString.parse(this.props.location.search)
, daria{ qs1 : 'naisarg', qs2 : 'parmar'}
React Router v4
Com o React Router v4,
this.props.location.query
ele não existe mais. Você precisa usarthis.props.location.search
e analisar os parâmetros de consulta sozinho ou usando um pacote existente, comoquery-string
.Exemplo
Aqui está um exemplo mínimo usando o React Router v4 e a
query-string
biblioteca.Racional
A equipe do React Router racional para remover a
query
propriedade é:Você pode encontrar a discussão completa no GitHub .
fonte
Tanto quanto eu sei, existem três métodos que você pode fazer isso.
1. use expressão regular para obter a string de consulta.
2.Você pode usar a API do navegador. imagem o URL atual é assim:
nós apenas queremos obter 123;
Primeiro
Então
3. use uma terceira biblioteca chamada 'query-string'. Primeiro instale-o
Em seguida, importe-o para o arquivo javascript atual:
O próximo passo é obter 'token' no URL atual, faça o seguinte:
Espero que ajude.
Actualizado em 25/02/2019
http://www.google.com.au?app=home&act=article&aid=160990
nós definimos uma função para obter os parâmetros:
Podemos obter 'ajuda':
fonte
O React Router v4 não possui mais o
props.location.query
objeto (consulte a discussão no github ). Portanto, a resposta aceita não funcionará para projetos mais recentes.Uma solução para a v4 é usar uma string de consulta da biblioteca externa para analisar o
props.location.search
fonte
{'?foo': 'bar'}
var prefixed = qs.parse('?a=b&c=d', { ignoreQueryPrefix: true });
deve corrigi-lo. Exemplo encontrado aqui: github.com/ljharb/qsAo usar ganchos React, não há acesso ao acesso
this.props.location
. Para capturar parâmetros de URL, usewindow
object.fonte
React Router v4
Observe que atualmente é experimental.
Verifique a compatibilidade do navegador aqui: https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/URLSearchParams#Browser_compatibility
fonte
você pode verificar o react-router , de forma simples, pode usar o código para obter o parâmetro de consulta desde que você tenha definido no seu roteador:
fonte
props.params
é para parâmetros de URL (segmento de URL prefixado com ':' no roteador de reação),props.location.query
armazena parâmetros de sequência de caracteres de consulta (após o '?') e é o que o OP deseja.React Router 5.1+
5.1 introduziu vários ganchos como
useLocation
euseParams
que podem ser úteis aqui.Exemplo:
Então, se visitamos dizer
Você poderia recuperá-lo como
fonte
Se o seu roteador for assim
Você receberá esse ID assim
fonte
Com este one-liner, você pode usá-lo em qualquer lugar no React Hook e no React Class Component com JavaScript simples.
https://www.hunterisgod.com/?city=Leipzig
fonte
Se você não está recebendo as
this.props
respostas esperadas com base nas outras respostas, pode ser necessário usarwithRouter
( docs v4 ):fonte
Eu tive dificuldade em resolver esse problema. Se nenhuma das opções acima funcionar, você pode tentar fazer isso. Estou usando o aplicativo create-react-app
Exigências
react-router-dom ":" ^ 4.3.1 "
Solução
No local em que o roteador está especificado
Adicione o nome do parâmetro que você gostaria de passar assim
Na página em que você está renderizando algum / caminho, você pode especificá-lo para visualizar o nome do parâmetro ID da chamada como este
No final, para onde você exporta o padrão
Lembre-se de incluir a importação
Quando console.log (this.props), você seria capaz do que foi passado. Diverta-se!
fonte
RouteComponentProps<{id: number}>
React router
da v4 em diante não fornece mais o objetoquery params
diretamentelocation
. A razão de serTendo incluído isso, faria mais sentido analisar apenas location.search em seus componentes de exibição que estão esperando um objeto de consulta.
Você pode fazer isso genericamente, substituindo o
withRouter
dereact-router
comocustomWithRouter.js
fonte
fonte
Talvez um pouco tarde, mas esse gancho de reação pode ajudá-lo a obter / definir valores na consulta de URL: https://github.com/rudyhuynh/use-url-search-params (escrito por mim).
Funciona com ou sem
react-router
. Abaixo está um exemplo de código no seu caso:fonte
this.props.params.your_param_name
vai funcionar.Esta é a maneira de obter os parâmetros da sua string de consulta.
Por favor, faça
console.log(this.props);
para explorar todas as possibilidades.fonte
No componente em que você precisa acessar os parâmetros, você pode usar
this.props.location.state.from.search
que revelará toda a cadeia de consulta (tudo após o
?
sinal)fonte
Digamos que haja um URL da seguinte forma
Se quisermos extrair o código desse URL, o método abaixo funcionará.
fonte
No React Router v4, apenas comRoute é a maneira correta
Você pode obter acesso às propriedades do objeto histórico e à correspondência mais próxima via componente de ordem superior withRouter. O withRouter transmitirá adereços atualizados de correspondência, localização e histórico para o componente agrupado sempre que renderizado.
https://reacttraining.com/react-router/web/api/withRouter
fonte
Eu usei um pacote externo chamado query-string para analisar o parâmetro url dessa maneira.
fonte
Quando você trabalha com a rota de reação dom, ele esvazia o objeto com for match, mas se você executar o código a seguir, ele será usado para o componente es6 e também funcionará diretamente para o componente function
Dessa forma, você pode obter adereços e combinar parâmetros e ID de perfil
Isso funcionou para mim depois de muita pesquisa no componente es6.
fonte
Ou talvez algo assim?
fonte
Você pode criar um gancho simples para extrair parâmetros de pesquisa do local atual:
então você pode usá-lo dentro do seu componente funcional assim:
fonte
fonte
fonte
solução mais simples!
no roteamento:
no código de reação:
fonte