当前位置:首页 > React

react如何实现跳转过渡

2026-01-25 03:38:17React

实现跳转过渡的方法

在React中实现页面跳转过渡效果,可以通过以下方法完成:

使用React Router和CSS过渡 React Router结合CSS动画是实现路由跳转过渡的常见方式。在SwitchRoutes组件外包裹CSSTransitionTransitionGroup,通过CSS定义进入和离开的动画效果。

import { CSSTransition, TransitionGroup } from 'react-transition-group';
import { Route, Switch } from 'react-router-dom';

function App() {
  return (
    <Route render={({ location }) => (
      <TransitionGroup>
        <CSSTransition
          key={location.key}
          timeout={300}
          classNames="fade"
        >
          <Switch location={location}>
            <Route path="/" exact component={Home} />
            <Route path="/about" component={About} />
          </Switch>
        </CSSTransition>
      </TransitionGroup>
    )} />
  );
}

配套CSS需定义过渡效果:

.fade-enter {
  opacity: 0;
}
.fade-enter-active {
  opacity: 1;
  transition: opacity 300ms;
}
.fade-exit {
  opacity: 1;
}
.fade-exit-active {
  opacity: 0;
  transition: opacity 300ms;
}

使用Framer Motion库 Framer Motion提供声明式动画API,可轻松实现复杂过渡效果。通过AnimatePresence组件包裹路由,配合motion.div定义动画属性。

import { AnimatePresence, motion } from 'framer-motion';
import { Route, Switch, useLocation } from 'react-router-dom';

function App() {
  const location = useLocation();
  return (
    <AnimatePresence exitBeforeEnter>
      <Switch location={location} key={location.pathname}>
        <Route path="/" exact>
          <motion.div
            initial={{ opacity: 0 }}
            animate={{ opacity: 1 }}
            exit={{ opacity: 0 }}
          >
            <Home />
          </motion.div>
        </Route>
      </Switch>
    </AnimatePresence>
  );
}

React Router v6的过渡实现 在v6版本中,可通过useOutlet配合动画库实现嵌套路由过渡:

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

function Layout() {
  const outlet = useOutlet();
  const location = useLocation();
  return (
    <AnimatePresence>
      <motion.div
        key={location.pathname}
        initial={{ x: 100, opacity: 0 }}
        animate={{ x: 0, opacity: 1 }}
        exit={{ x: -100, opacity: 0 }}
      >
        {outlet}
      </motion.div>
    </AnimatePresence>
  );
}

自定义useTransitionHook 封装自定义Hook管理过渡状态,适用于需要精细控制动画的场景:

function usePageTransition() {
  const [isTransitioning, setIsTransitioning] = useState(false);

  const startTransition = useCallback(() => {
    setIsTransitioning(true);
    return new Promise(resolve => {
      setTimeout(() => {
        setIsTransitioning(false);
        resolve();
      }, 500);
    });
  }, []);

  return { isTransitioning, startTransition };
}

使用时在路由跳转前调用startTransition

react如何实现跳转过渡

const { startTransition } = usePageTransition();

const navigateWithTransition = async (to) => {
  await startTransition();
  navigate(to);
};

注意事项

  • 过渡时间需与路由切换同步,避免组件卸载过早导致动画中断
  • 对于复杂路由结构,需确保每个路由层级都有唯一的key属性
  • 性能优化:对于移动设备,优先使用GPU加速的CSS属性(如transformopacity
  • 服务端渲染(SSR)场景下,需考虑动画的hydration处理

分享给朋友:

相关文章

vue如何实现

vue如何实现

Vue 实现方法 Vue 提供了多种方式来实现功能,具体取决于需求。以下是一些常见场景的实现方法: 数据绑定 使用 v-model 指令实现双向数据绑定,适用于表单输入元素。在组件中可以通过 pro…

vue如何实现高亮

vue如何实现高亮

实现文本高亮的方法 在Vue中实现文本高亮通常可以通过以下几种方式完成: 使用v-html指令结合字符串替换 通过将需要高亮的文本部分替换为HTML标签(如<span class="highl…

vue如何实现404

vue如何实现404

实现 Vue 404 页面的方法 在 Vue 中实现 404 页面通常需要结合路由配置和动态路由匹配。以下是几种常见方法: 使用通配符路由匹配 在 Vue Router 配置中,可以通过 * 通配符…

vue 实现自动跳转

vue 实现自动跳转

使用 vue-router 实现自动跳转 在 Vue 项目中,可以通过 vue-router 的编程式导航实现页面自动跳转。以下是几种常见场景的实现方法: 基础跳转 // 在组件方法中调用 thi…

vue实现iframe跳转

vue实现iframe跳转

在Vue中实现iframe跳转 使用iframe在Vue中实现页面跳转可以通过动态修改iframe的src属性来完成。以下是一种常见的方法: 动态绑定iframe的src属性 在Vue组件中,可以通…

vue 如何实现跳页

vue 如何实现跳页

Vue 实现跳页的方法 在 Vue 中实现跳页通常涉及路由跳转或页面重定向,以下是几种常见的方法: 使用 vue-router 进行路由跳转 通过 Vue 官方路由库 vue-router 实现页面…