React-router-dom (v6) 与 Framer Motion (v4)

2024-03-20

我正在尝试将我的react-router-dom更新到v6,但它似乎会导致成帧器运动AnimatePresence出现问题,特别是退出过渡。

在 App.js 中:

import { Routes, Route } from "react-router-dom";
import {AnimatePresence} from "framer-motion";  

import Home from "./Components/Home";
import About from "./Components/About";
function App() {
  return (
    <div className="App">

      {/* globals such as header will go here  */}

      <AnimatePresence exitBeforeEnter>
        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="about" element={<About />} />
        </Routes>
      </AnimatePresence>
    </div>
  );
}

export default App;

然后在我的关于/主页组件中我有:

import {Link} from "react-router-dom";
import {motion} from "framer-motion";  

    function About() {
    
        const pageMotion = {
            initial: {opacity: 0, x: 0},
            animate: {opacity: 1, x: 50, transition: {duration: 2}},
            exit: {opacity: 0, x:0, transition: {duration: 2}}
        };
    
        return (
            <div className="about">
                <motion.div initial="initial" animate="animate" exit="exit" variants={pageMotion}>about page</motion.div>
                <Link to="/">Go to home page</Link>
            </div>
        )
    }
    
    export default About

“初始”和“动画”工作正常,但退出被忽略,并立即跳转到相关页面(而不是先动画出来)。

注意:我还必须降级到framer-motion v4,因为v5 不能与Create-react-app 一起使用。

任何帮助表示赞赏。


您需要提供给Routes the key and location像这样的道具:

动画路线.js

const AnimatedRoutes = () => {
  const location = useLocation();

  return (
    <AnimatePresence exitBeforeEnter>
      <Routes location={location} key={location.pathname}>
        <Route path="/" element={<Home />} />
        <Route path="about" element={<About />} />
      </Routes>
    </AnimatePresence>
  );
};

并且由于调用 useLocation 的组件必须包装在 BrowserRouter 中:

App.js

function App() {
  return (
    <BrowserRouter>
      <AnimatedRoutes />
    </BrowserRouter>
  );
}

工作代码沙箱 https://codesandbox.io/s/react-router-v6-forked-vc8mr?file=/src/About.js.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React-router-dom (v6) 与 Framer Motion (v4) 的相关文章

  • 如何在光标下的所有元素上调用 mouseover?

    我有一个网络应用程序 每次单击时都会创建一个点 见下文 当我将鼠标悬停在一堆点上时 我希望光标下的每个点都会触发 mouseover 或 mouseenter 事件 然而 只有一个事件被触发 即堆栈 顶部 的点的事件 当鼠标移动到一堆多个点
  • 在javascript中使用“return !0”有什么意义吗?

    如果您转到谷歌结果页面并运行rwt toString 你会看到这个函数的返回调用是 return 0 我想不出任何理由为什么这不会总是如此true 这只是一个简写吗true 还是还有更多事情发生 总是如此 但下载需要 2 个字节 0是 2
  • 如何使用 LinkedIn javascript sdk 检索包括所有字段的职位列表?

    我想要获取 LinkedIn 会员在其个人资料中输入的每个职位的 ID 头衔 摘要 开始日期 结束日期 当前状态和公司名称 我测试了一个查询休息控制台 https apigee com console linkedin我得到了想要的结果 查
  • 如何使用 axios / jest 测试失败的请求

    我创建了一个非常小的应用程序 如果您传递硬币和数量 它可以计算为某些加密货币支付的总价格 我想测试错误 但我总是收到 收到的承诺已解决而不是被拒绝 我相信这是因为如果 url 错误 axios 仍然会解决承诺 我遇到的第二个问题是 我尝试测
  • 来自 DataURL 的 Blob?

    Using FileReader s readAsDataURL 我可以将任意数据转换为数据 URL 有没有办法将数据 URL 转换回Blob使用内置浏览器 API 的实例 用户 Matt 一年前提出了以下代码 如何在javascript中
  • 如何获取 RxJSSubject 或 Observable 的当前值?

    我有 Angular 2 服务 import Storage from storage import Injectable from angular2 core import Subject from rxjs Subject Inject
  • 使用 NodeJS 让 Discord 机器人发送带有消息的图片

    我有几张照片 全部在 imgur 上 带有直接图像链接 格式 https i imgur com XXXXXX jpg https i imgur com XXXXXX jpg 以及用 NodeJS 制作的 Discord 机器人 我发送这
  • Three.js - 在代码中包含网格数据

    我有这个 Three js 代码 其中 JSON 加载器从文件 models mountain json 加载网格 var Three new function this scene new THREE Scene this camera
  • jQuery Blur() 在 Chrome 上不起作用

    我在 MacOSX 上运行这个http jsfiddle net q84wv http jsfiddle net q84wv on Chrome最新版本 它不会工作 在 Firefox 上运行时它工作得很好 有什么线索吗 假设您想要aler
  • 引入 V8 后,Google Apps 脚本无法为其他用户完全执行

    我编写了一个脚本 得到了这里好心人的大力帮助 该脚本使用 Google Sheets 脚本复制 Google Drive 上的文件夹 和内容 它运行了很长一段时间 但后来我启用了 V8 引擎 现在已禁用 问题是 它仍然适用于我 也许还有其他
  • Chrome Javascript 调试器暂停时不会重新加载页面

    有时 当我在 Chrome 中调试某些 javascript 并且暂停了 javascript 时 如果我尝试重新加载页面 chrome 只会 继续 调试器 单步执行到下一个断点 似乎没有任何方法可以强制 javascript 完全停止运行
  • 空 URL 哈希导致页面在 js 事件上跳转

    我有一个带有下一个和上一个按钮的照片库 如果我的某个 javascript 方法由于某种原因被破坏 那么当单击其中一个按钮时 它会向 url 添加一个哈希值 即 www google com 我知道可以给散列一个 div id 来跳转到页面
  • 对象数组 - 在 Vue.js 生态系统中更新对象的正确方法

    我不确定问题到底出在哪里 但我会看看是否有人可以帮助我理解我的代码出了什么问题 我正在利用 Vuex 商店来跟踪某些不断变化的状态 我这样做如下 import Vue from vue import Vuex from vuex Vue u
  • setInterval 内的返回值

    我想在 setInterval 内返回一个值 我只想以一定的时间间隔执行一些操作 这就是我尝试过的 function git limit var i 0 var git setInterval function console log i
  • Meteor.js 登录事件

    因此 我对 Meteor 框架和 JavaScript 总体来说还很陌生 但我正在使用该框架开发一个小项目 以尝试让自己达到标准 基本上我正在开发一个微博客网站 目前 用户可以通过多种服务登录 fb google 等 我通过插入所需 url
  • 使用Promise而不拒绝它会导致内存泄漏吗? [复制]

    这个问题在这里已经有答案了 代码如下 function test value return new Promise function fulfill reject try fulfill true catch e throw e 我担心的是
  • 为什么我需要 $(document.body) 来使用 Mootools Element 方法扩展 document.body?

    因此 在尝试让我的应用程序在最新的 IE 上运行后 结果发现 IE 不喜欢以下代码 document body getElement className Firefox 和 Chrome 响应良好 但是document bodyIE 上没有
  • 常规 JavaScript 可以与 jQuery 混合使用吗?

    例如 我可以采用这个脚本 来自 Mozilla 教程 https developer mozilla org en Canvas tutorial Basic usage
  • 使用 jQuery Tablesorter 操作后如何恢复当前页面?

    我正在使用 tablesorter 但无法找到有关插件 tablesorter 寻呼机的任何文档 问题是我有一个显示一些数据的表 并且在每一行中都有一个删除链接 该链接附加了要删除的元素的唯一标识符 显然 是否可以保存我正在删除的页面 然后
  • 在 Google Apps 脚本中的文本前插入换行符

    我需要在 Google 文档中的某些文本之前插入一些换行符 尝试过这种方法但出现错误 var body DocumentApp getActiveDocument getBody var pattern WORD 1 var found b

随机推荐

  • mysql 用以前的值生成缺失的日期

    下面是一个具有稀疏日期的 mysql 表 col dt id value A1 2018 05 28 30 A1 2018 05 30 20 A1 2018 05 31 50 A1 2018 06 01 50 A1 2018 06 04 8
  • 将 .NET Standard 2.1 与 UWP 结合使用

    我今天犯了一个大错误 更新了一些 NuGet 库 它迫使我要么回滚一周的工作量 要么升级到 ASP NET Core 3 0 我讨厌使用非生产的东西 但我也不想理清这些库 所以我升级了 然后它迫使我重新定位 NET Standard 2 1
  • 如何使用 PDFBOX 检查完全嵌入和子集嵌入字体

    您好 我想使用 PDFBOX 检查 PDF 中字体的完全嵌入和子集嵌入 我尝试使用以下逻辑来检查 private boolean IsEmbedded Map
  • 如何更改 Bean Validation 中 ValidationMessages.properties 的位置

    默认情况下 ValidationMessages properties 可以位于我的类路径的根目录中 我可以更改此文件的位置 例如 com myapp Anything properties 吗 来自 JSR 303 规范 4 3 1 1
  • 如何实现方法链?

    在 C 中 如何实现在自定义类中链接方法的能力 以便可以编写如下内容 myclass DoSomething DosomethingElse x etc Thanks 链接是从现有实例生成新实例的一个很好的解决方案 public class
  • Django-tastypie:有关于 POST 中文件上传的示例吗?

    谁能给出一个关于使用 tastypie FileField 的完整示例 包括服务器端和客户端吗 这是我尝试过的 models py class Foo models Model img models ImageField upload to
  • VBA 从 OneDrive 下载文件

    我正在尝试从 OneDrive 下载文件 我是 API 概念的新手 这里是代码 Sub OneDrive Download Declare the Object Dim oRequest As Object Create and Assig
  • 从 Function 应用访问虚拟网络中的 Cosmos DB

    对这么长的帖子表示歉意 但我已经在这个问题上工作了几天 但似乎找不到解决方案 情况 我想通过将 Azure 中的 Cosmos DB 放置在虚拟网络 VNet 中来限制对它的访问 并且只允许通过 Function 应用进行访问 Approa
  • fipy 中的 Gmsh 网格并行执行

    我正在尝试解决 gmsh 网格上的并行问题 加载 geo 文件时发生错误 raise EnvironmentError Gmsh version must be gt 2 0 我安装的gmsh版本是2 8 3 我也尝试过2 13 2 10
  • 当用户想要应用程序中的另一种颜色时如何更改颜色? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 嗨 我制作了一个 Android 应用程序 我在想 如何实现通过单击按钮将整个应用程序更改为另一种颜色 例如从白色到黑色 有没有一种方
  • 调整 jQueryUI 对话框的高度,使其与内容一样高,最高可达最大值

    使用 jQueryUI 的对话框 我想弹出信息 我的问题是我想将对话框的高度设置为内容的高度 如果我不指定高度 那么效果很完美 高度根据内容的高度自动计算 那么问题是 如果内容非常高 对话框也会变得非常高并低于窗口 maxHeight 在这
  • TreeView 中的多项选择

    我正在使用 Windows 窗体TreeView在我的程序中进行控制 我想允许用户通过拖动鼠标指针来选择同一级别的多个节点 也称为 套索 选择 我认为没有标准TreeView允许这样做 我的问题是实现这一目标的最佳方法是什么 我是否必须在自
  • Ansible 检查作为变量提到的安装的磁盘空间

    我是 ansible 的新手 目前正在开发一个游戏 该游戏将查看远程计算机的磁盘空间是否已达到 70 的阈值 如果他们已经达到了 它应该抛出错误 我在以下位置找到了一个很好的例子 使用ansible管理磁盘空间 https stackove
  • 脚本缩小和与 MSBuild 的持续集成

    在我最近使用 C ASP NET 进行的一个项目中 我有一些相当复杂的 JavaScript 文件和一些漂亮的样式表 随着这些脚本资源规模的增长建议减少资源 http developer yahoo com yui compressor 当
  • 将 this.refs 作为 React.js 中 jsx 的属性传递

    我试图将 1 个节点作为另一个 React 组件的属性传递 如下所示 render function return div div div div
  • 在 Mac OSX 上卸载 Redis。安装更新后正在运行旧版本

    在Mac上 如何找到旧版本的Redis并将其完全卸载 我使用 OSX 并使用以下命令安装 Redisbrew install redis 由brew安装的版本状态redis 3 0 7 但是 当我运行命令时 redis server输出表明
  • 如何修复“超出最大调用堆栈大小”AngularJS

    我正在使用 AngularJs 和 Ui Router 我试图设置两个不同的主页 一个用于已登录的用户 另一个用于未登录的用户 但我收到以下错误 RangeError Maximum call stack size exceeded I r
  • 如何为 VS 扩展嵌套工具菜单按钮?

    我正在构建我的第一个 VS 扩展 因此我目前在该领域的技能相当于遵循教程和提出问题 该扩展用于加密 解密一部分web configWeb 应用程序项目的文件 我有 2 个命令 目前按钮设置在 vsct文件如下
  • 无法安装或运行应用程序 - System.Windows.Interactivity 版本 4.0.0.0

    我完全被困住了 搜索了又搜索了 我有一个对 System Windows Interactivity 版本 4 5 0 0 的引用 当我通过 ClickOnce 释放系统时 系统未安装并报告以下错误 无法安装或运行该应用程序 该应用程序需要
  • React-router-dom (v6) 与 Framer Motion (v4)

    我正在尝试将我的react router dom更新到v6 但它似乎会导致成帧器运动AnimatePresence出现问题 特别是退出过渡 在 App js 中 import Routes Route from react router d