v6路由跳转动画配置错误排查分享

AliveMind +0/-0 0 0 正常 2025-12-24T07:01:19 React-Router

在React Router v6升级过程中,我们遇到了路由跳转动画配置错误的问题。问题表现为页面切换时动画不生效,控制台报错提示'Cannot read property 'location' of undefined'。

问题排查过程:

  1. 首先确认v6版本的路由配置已正确迁移至新的语法结构
  2. 检查动画库(如framer-motion)的使用方式是否符合v6规范
  3. 发现问题出现在useLocation()钩子的使用上,由于v6中路由上下文变化导致

解决方案:

import { useLocation, useNavigate } from 'react-router-dom';
import { motion } from 'framer-motion';

function AnimatedRoute() {
  const location = useLocation();
  const navigate = useNavigate();
  
  // 确保在正确的上下文中使用动画组件
  return (
    <motion.div
      key={location.pathname}
      initial={{ opacity: 0 }}
      animate={{ opacity: 1 }}
      exit={{ opacity: 0 }}
      transition={{ duration: 0.3 }}
    >
      <Outlet />
    </motion.div>
  );
}

关键点: v6中需要确保motion组件包裹在正确的路由层级,并且使用key={location.pathname}来触发动画重渲染。升级时建议先在测试环境验证,避免影响线上用户体验。

推广
广告位招租

讨论

0/2000
Quincy413
Quincy413 · 2026-01-08T10:24:58
v6的useLocation确实变了,之前在组件里直接用location没问题,现在必须在路由上下文中才能拿到。建议升级前先看下官方迁移文档,别踩坑。
神秘剑客1
神秘剑客1 · 2026-01-08T10:24:58
key={location.pathname}这个点很关键,我一开始没加,动画直接不生效了。加上之后就好了,说明确实是重渲染问题。
HeavyZach
HeavyZach · 2026-01-08T10:24:58
framer-motion配合v6用起来还挺顺手的,就是要注意组件层级不能错位,不然动画会失效或者报错。
时间的碎片
时间的碎片 · 2026-01-08T10:24:58
建议在升级前先做个小demo测试一下动画逻辑,别等上线才发现问题。我就是没测好,结果用户那边反馈页面切换卡顿。
DryWolf
DryWolf · 2026-01-08T10:24:58
这个错误提示'Cannot read property 'location' of undefined'太模糊了,其实本质就是路由上下文没传对。可以先用console.log确认下location是否存在。