¿Alguien puede explicar la diferencia entre
<Route exact path="/" component={Home} />
y
<Route path="/" component={Home} />
No sé el significado de "exacto"
¿Alguien puede explicar la diferencia entre
<Route exact path="/" component={Home} />
y
<Route path="/" component={Home} />
No sé el significado de "exacto"
Respuestas:
En este ejemplo, nada realmente. losexact
parámetro entra en juego cuando tienes múltiples rutas que tienen nombres similares:
Por ejemplo, imagine que tenemos un Users
componente que muestra una lista de usuarios. También tenemos un CreateUser
componente que se utiliza para crear usuarios. La url para CreateUsers
debe estar anidada debajo Users
. Entonces nuestra configuración podría verse así:
<Switch>
<Route path="/users" component={Users} />
<Route path="/users/create" component={CreateUser} />
</Switch>
Ahora el problema aquí, cuando vamos al http://app.com/users
enrutador, pasará por todas nuestras rutas definidas y devolverá la PRIMERA coincidencia que encuentre. Entonces, en este caso, Users
primero encontraría la ruta y luego la devolvería. Todo bien.
Pero, si fuéramos http://app.com/users/create
, volvería a pasar por todas nuestras rutas definidas y devolvería la PRIMERA coincidencia que encuentre. React router hace una coincidencia parcial, por /users
lo que coincide parcialmente /users/create
, por lo que devolvería la Users
ruta de forma incorrecta .
El exact
parámetro deshabilita la coincidencia parcial para una ruta y se asegura de que solo devuelva la ruta si la ruta es una coincidencia EXACTA con la url actual.
Entonces, en este caso, debemos agregar exact
a nuestra Users
ruta para que solo coincida con /users
:
<Switch>
<Route exact path="/users" component={Users} />
<Route path="/users/create" component={CreateUser} />
</Switch>
Los documentos explican exact
en detalle y dan otros ejemplos.
exact
debería ser el valor predeterminado en mi opinión
/admin//users
en el componente Administrador y /admin/users/create
en el componente raíz? Actualmente tengo esta situación y la exact
solución típica no funciona correctamente.
En resumen, si tiene múltiples rutas definidas para el enrutamiento de su aplicación, encerradas con un Switch
componente como este;
<Switch>
<Route exact path="/" component={Home} />
<Route path="/detail" component={Detail} />
<Route exact path="/functions" component={Functions} />
<Route path="/functions/:functionName" component={FunctionDetails} />
</Switch>
Luego, debe poner una exact
palabra clave en la ruta, cuya ruta también está incluida en la ruta de otra ruta. Por ejemplo, la ruta de inicio /
se incluye en todas las rutas, por lo que debe tener una exact
palabra clave para diferenciarla de otras rutas que comienzan con /
. La razón también es similar a la /functions
ruta. Si desea usar otra ruta de ruta como /functions-detail
o /functions/open-door
que incluye /functions
en ella, entonces debe usarla exact
para la /functions
ruta.
Echa un vistazo aquí: https://reacttraining.com/react-router/core/api/Route/exact-bool
exacto: bool
Cuando es verdadero, solo coincidirá si la ruta coincide location.pathname
exactamente.
**path** **location.pathname** **exact** **matches?**
/one /one/two true no
/one /one/two false yes
La respuesta más corta es
Por favor intente esto.
<switch>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/shop" component={Shop} />
</switch>
exact
atributo / accesorio y, por lo tanto, seguramente no es una "respuesta". Debería tratar de abordar la pregunta que realmente se está haciendo en lugar de dar una solución a un problema que no está seguro de que OP realmente tenga.