¿Qué hace vue-router-best-practices?
Patrones de Vue Router 4, guardias de navegación, parámetros de ruta e interacciones del ciclo de vida entre rutas y componentes.
Configuración básica
import { createRouter, createWebHistory } from 'vue-router'
import Home from './views/Home.vue'
import About from './views/About.vue'
const routes = [
{ path: '/', component: Home },
{ path: '/about', component: About },
]
const router = createRouter({
history: createWebHistory(),
routes,
})
export default router
Guardias de navegación
Guardia global beforeEach
router.beforeEach((to, from) => {
// Lógica de autenticación o redirección
if (to.meta.requiresAuth && !isAuthenticated()) {
return '/login'
}
})
Guardia por ruta beforeEnter
const routes = [
{
path: '/admin',
component: Admin,
beforeEnter: (to, from) => {
// Solo administradores
if (!isAdmin()) return '/403'
},
},
]
Parámetros de ruta
const routes = [
{ path: '/user/:id', component: User, props: true },
]
// En el componente
const props = defineProps({
id: String,
})
Ciclo de vida y navegación
Los componentes pueden reaccionar a cambios de ruta mediante onBeforeRouteUpdate:
import { onBeforeRouteUpdate } from 'vue-router'
onBeforeRouteUpdate((to, from) => {
// Recargar datos cuando cambie el parámetro
fetchUser(to.params.id)
})
Navegación programática
// Ir a una ruta
router.push({ name: 'User', params: { id: 123 } })
// Reemplazar historial
router.replace('/login')
// Retroceder
router.go(-1)
Buenas prácticas
- Usar
nameen lugar depathpara las rutas (más mantenible). - Pasar props a los componentes para evitar acoplamiento.
- Aprovechar
metapara metadatos de ruta (títulos, roles, etc.). - Utilizar
route.querypara parámetros opcionales yroute.paramspara obligatorios.