Reagir notas de estudo - reagir ganchos do roteador v6
prefácio
Atualmente estou estudando react router
e aprendi que existem grandes diferenças entre as versões v5 e v6. react router v6
Este artigo combinará as alterações e novas adições na especificação do código-fontehooks
Ao ler este artigo, você entenderá:
- useHref
- useInRouterContext
- useLocation
- useMatch
- useNavigate
- useNavigationType
- useOutlet
- useParams
- useSearchParams
- useResolvedPath
- useRoutes
Explicação detalhada
useHref
declare function useHref(to: To): string;
Função
useHref
O gancho retorna uma URL que pode ser usada para vincular a um determinado local, mesmo fora do roteador React.
O gancho useHref retorna uma URL que pode ser usada para vincular ao local fornecido, mesmo fora do React Router.
useHref
Passe uma string ou To
objeto e retorne o caminho absoluto de uma URL. Você pode passar um caminho relativo, caminho absoluto ou objeto To no parâmetro.
react hooks v6
O componente no Link
uso interno useHref
para obter seu valor href
export interface Path {
pathname: Pathname;
search: Search;
hash: Hash;
}
export type To = string | Partial<Path>;
exemplo
Rota atual: /page1/page2
import React, {
useEffect} from 'react';
import {
useHref} from 'react-router-dom';
function Page2(props) {
useEffect(()=>{
console.log(useHref('../')) // 输出 '/page1/'
console.log(useHref('../../')) // 输出 '/'
console.log(useHref('/page1')) // 输出 '/page'
console.log(useHref('/pageabc')) // 输出 '/pageabc' 可见路径与当前路由无关
console.log(useHref({
pathname:'/page1',search:'name=123',hash:'test'})) // 输出 '/page1?name=123#test'
},[])
return (
<div></div>
);
}
export default Page2;
useInRouterContext
declare function useInRouterContext(): boolean;
Função
Retorna verdadeiro se o componente Router
for renderizado no contexto do componente , falso caso contrário. useInRouterContext
Isso é útil para extensões de terceiros que precisam saber se devem ser react router
renderizadas em um contexto.
Os hooks useInRouterContext retornam true se o componente estiver sendo renderizado no contexto de um , false caso contrário. Isso pode ser útil para algumas extensões de terceiros que precisam saber se estão sendo renderizadas no contexto de um aplicativo React Router.
Determine se o componente atual está no componente Router
criado porContext
useLocation
declare function useLocation(): Location;
interface Location extends Path {
state: unknown;
key: Key;
}
Função
Isso hook
retorna o location
objeto de rota atual.
Este gancho retorna o objeto de localização atual . Isso pode ser útil se você quiser executar algum efeito colateral sempre que o local atual for alterado.
useMatch
declare function useMatch<ParamKey extends string = string>(
pattern: PathPattern | string
): PathMatch<ParamKey> | null;
Função
Retorna dados de acesso para rotas no caminho fornecido em relação ao local atual.
Retorna dados de correspondência sobre uma rota no caminho fornecido em relação ao local atual.
react router v5
in useRouteMatch
foi renomeado na versão v6 useMatch
. O exemplo interno chama matchPath
o método para corresponder um padrão de caminho de rota a um nome de caminho de URL e retorna informações sobre a correspondência. Retorna nulo se o padrão não corresponder ao nome de caminho fornecido.
useNavigate
declare function useNavigate(): NavigateFunction;
interface NavigateFunction {
(
to: To,
options?: {
replace?: boolean; state?: any }
): void;
(delta: number): void;
}
Função
O gancho useNavigate retorna uma função que permite navegar programaticamente, por exemplo, após enviar um formulário.
O gancho useNavigate retorna uma função que permite navegar programaticamente, por exemplo, após o envio de um formulário.
react router v5
O componente obtido useHistory
na versão v6 foi renomeado useNavigate
. grandes mudanças no uso
exemplo
Rota atual: /user/page2
Outra rota: /user/page1
import React, {
useEffect} from 'react'
import {
useNavigate} from 'react-router-dom'
function Page2(){
let navigate = useNavigate()
useEffect(()=>{
navigate('/user/page1') // 导航到'/user/page1'
navigate('../') // 导航到'/user'
navigate(-1) // 导航到/user/page1 相当于v5中history.go(-1) history.goBack()
navigate(1) //导航到/user 相当于v5中history.go(1) history.goForward()
navigate('/user/page2/',{
replace:true,state:{
name:123}} // 相当于v5中history.replace(),并同时传入state
},[])
return <div></div>
}
export default Page2
useNavigationType
declare function useNavigationType(): NavigationType;
type NavigationType = "POP" | "PUSH" | "REPLACE";
Função
Esse gancho retorna o tipo de navegação atual ou como o usuário chegou à página atual; por meio de uma operação pop, push ou replace na pilha de histórico.
Este gancho retorna o tipo de navegação atual ou como o usuário chegou à página atual; por meio de uma ação pop, push ou replace na pilha de histórico.
Isso hooks
é semelhante às propriedades do react router v5
objeto passadas pelo componente no parâmetro e retorna o tipo de operação que está sendo acionada no momentohistory
action
navigate
useOutlet
declare function useOutlet(): React.ReactElement | null;
Função
Retorna os elementos das rotas secundárias da rota da rota atual. Isso é usado internamente hook
pelo componente para renderizar rotas secundárias.Outlet
Retorna o elemento para a rota filha neste nível da hierarquia de rota. Este gancho é usado internamente porpara renderizar rotas secundárias.
useParams
declare function useParams<
K extends string = string
>(): Readonly<Params<K>>;
Função
useParams
Retorna um objeto de pares chave/valor para parâmetros de URL. Use isso para acessar o Route
arquivo match.params
. Uma rota filha herda todos os parâmetros de sua rota pai.
O gancho useParams retorna um objeto de pares de chave/valor dos parâmetros dinâmicos da URL atual que foram correspondidos pelo . As rotas secundárias herdam todos os parâmetros de suas rotas primárias.
useSearchParams
declare function useSearchParams(
defaultInit?: URLSearchParamsInit
): [URLSearchParams, SetURLSearchParams];
type ParamKeyValuePair = [string, string];
type URLSearchParamsInit =
| string
| ParamKeyValuePair[]
| Record<string, string | string[]>
| URLSearchParams;
type SetURLSearchParams = (
nextInit?: URLSearchParamsInit,
navigateOpts?: : {
replace?: boolean; state?: any }
) => void;
Função
useSearchParams
String de consulta para ler e modificar a posição atual na URL. Assim useState
como , useSearchParams
retorna uma matriz contendo dois valores: 当前位置的搜索参数
e 一个可用于更新它们的函数
.
O gancho useSearchParams é usado para ler e modificar a string de consulta na URL para o local atual. Assim como o useStatehook do próprio React , useSearchParams retorna uma matriz de dois valores: os parâmetros de pesquisa do local atual e uma função que pode ser usada para atualizá-los.
useSearchParams
funciona de forma semelhante a navigate
, mas apenas para search
partes do URL.
Nota: O segundo parâmetro de setSearchParams deve ser do mesmo tipo que o segundo parâmetro de navegar
useResolvedPath
declare function useResolvedPath(to: To): Path;
Função
Este gancho analisa o nome do caminho no objeto fornecido e o nome do caminho do local atual e retorna um objeto Path
Esse gancho resolve o nome do caminho do local no valor fornecido para o nome do caminho do local atual.
useRoutes
declare function useRoutes(
routes: RouteObject[],
location?: Partial<Location> | string;
): React.ReactElement | null;
Função
useRoutes
Ganchos Route
são funcionalmente equivalentes a componentes, mas usam objetos JavaScript em vez de Route
elementos para definir suas rotas. Este objeto Route
tem os mesmos atributos dos elementos, mas não requer JSX
O gancho useRoutes é o equivalente funcional de, mas usa objetos JavaScript em vez de elementos para definir suas rotas. Esses objetos têm as mesmas propriedades dos elementos normais , mas não requerem JSX.
Observação: o valor de retorno de useRoutes é um React Element que você pode usar para renderizar a árvore de rota ou nulo (quando a rota não corresponde)
documentos de referência
remix-run/react-router/packages/react-router/index.tsx
remix-run/react-router/packages/react-router-dom/index.tsx
remix-run/history/packages/history/index.ts
reagir roteador 官方文档