1.Framer Motion 中 motion/react 和 motion/react-client 的用法和区别

news2025/4/20 2:27:05

背景知识:服务器端渲染 (SSR) 和客户端渲染 (CSR)
在这里插入图片描述
在最新的 Motion for React(原 Framer Motion)12.x 及更高版本中,官方提供了两个入口模块:motion/reactmotion/react-client。二者对外 API 完全一致,但针对的运行环境不同,分别适合“客户端组件”(Client Components)和“服务器组件”(Server Components)场景。选择时,只需根据组件类型(是否带 "use client")导入对应模块:在需要在浏览器端执行动画的组件中使用 motion/react;在 React Server Components 中使用 motion/react-client,以避免在服务端构建时引入浏览器特有的代码。


🎯 React 渲染模式回顾

1. 客户端渲染(CSR)

客户端渲染(CSR)指浏览器先加载一个基础 HTML,再由 React 在客户端运行 JavaScript 并动态挂载组件 UI

2. 服务器端渲染(SSR)

服务器端渲染(SSR)先在服务端将组件渲染为 HTML 字符串发送给浏览器,随后通过 React 的“hydrate”过程接管页面,以实现交互能力。

3. React Server Components(RSC)

React 19 引入的 Server Components 允许组件完全在服务器上运行并输出标记,客户端仅接收静态内容,无需再发送对应的 JavaScript 进行“hydrate”。


1. motion/react

  • 用途: 这是 Motion 库的主要模块,用于在 React 客户端组件 中创建动画。
  • 功能: 提供完整的 Motion 动画功能,包括 <motion> 组件、动画属性(如 animatewhileHoverwhileInView 等)、手势支持、变体(variants)、退出动画(通过 AnimatePresence)等。此模式支持完整的动画和交互功能(如手势、动态属性变化等),适用于需要客户端交互的组件‌
  • 使用场景: 适用于传统的 React 客户端渲染场景,组件运行在浏览器端,依赖 React 的客户端生命周期和交互性。
  • 导入方式:
    import { motion } from "motion/react";
    
  • 示例:
    import { motion } from "motion/react";
    
    function Component() {
      return (
        <motion.div
          animate={{ scale: 1.2 }}
          whileHover={{ scale: 1.5 }}
          transition={{ duration: 0.5 }}
        >
          Hello, Motion!
        </motion.div>
      );
    }
    
  • 注意事项:
    • 仅适用于客户端组件,不能直接在 React 服务器组件中使用。
    • 需要确保组件在客户端渲染环境中运行,通常在 Next.js 中需要添加 "use client" 指令。

2. motion/react-client

  • 用途: 专为 React 服务器组件(React Server Components, RSC)设计,提供在服务器端渲染场景下使用 Motion 动画的支持。依赖客户端计算 服务端生成静态动画,该模式仅支持预定义的静态动画效果,适用于服务端渲染的无交互场景。
  • 功能: 与 motion/react 类似,但针对服务器组件进行了优化。允许在服务器端渲染的上下文中使用 Motion 的动画功能,同时确保动画逻辑在客户端正确执行。
  • 使用场景: 适用于 Next.js 等支持服务器组件的框架,特别是在使用 App Router 的项目中,结合服务器端渲染(SSR)或静态生成(SSG)时需要动画。适用组件‌ 按钮、可拖拽元素等 页面骨架、静态内容区块
  • 导入方式:
    import * as motion from "motion/react-client";
    
  • 示例:
        // 服务器组件(无需 "use client")
      import * as motion from "motion/react-client"; 
      
      export function ServerBox() 
        return (
          <motion.div
            initial={{ opacity: 0 }}
            animate={{ opacity: 1 }}
            transition={{ duration: 0.5 }}
          >
            服务端组件静态动画
          </motion.div>
        );
      }
        }
        ```
    
  • 注意事项:
    • 由于 React 服务器组件无法直接处理客户端交互(如手势或动态事件),motion/react-client 通常需要在客户端组件中结合使用(通过 "use client")。
    • 服务器组件中只负责静态渲染部分,动画逻辑会在客户端接管。
    • 确保正确配置 "use client",否则可能会遇到错误(如 createContext 相关的错误)。

📌 选型指南

  1. Client Components(带 "use client" 的文件)
    • 推荐: motion/react,提供完整的浏览器动画能力及 SSR 水合兼容 。
  2. Server Components(React Server Components)
    • 必须: motion/react-client,避免引入浏览器特有模块,确保在服务端构建时不出错 。
  3. 纯 CSR 项目(Create React App、Vite 等)
    • 可选: motion/react-client,享轻量化包体;亦可使用 motion/react 以保证未来兼容 。

🔚 结语

通过上述梳理,您可以根据组件类型和渲染环境,在项目中无缝切换 motion/react 与 motion/react-client,既保证动画体验,又实现包体与构建的最优配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2338414.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简易 Python 爬虫实现,10min可完成带效果源码

目录 准备工作 编写爬虫代码 运行爬虫 查看结果 遇到的问题及解决 总结 前言和效果 本文记录了使用 Python 实现一个简单网页爬虫的过程&#xff0c;目标是爬取 quotes.toscrape.com 的名言和作者&#xff0c;并将结果保存到文本文件。以下是完整步骤&#xff0c;包含环境…

【学习笔记】Py网络爬虫学习记录(更新中)

目录 一、入门实践——爬取百度网页 二、网络基础知识 1、两种渲染方式 2、HTTP解析 三、Request入门 1、get方式 - 百度搜索/豆瓣电影排行 2、post方式 - 百度翻译 四、数据解析提取三种方式 1、re正则表达式解析 &#xff08;1&#xff09;常用元字符 &#xff0…

旅游资源网站登录(jsp+ssm+mysql5.x)

旅游资源网站登录(jspssmmysql5.x) 旅游资源网站是一个为旅游爱好者提供全面服务的平台。网站登录界面简洁明了&#xff0c;用户可以选择以管理员或普通用户身份登录。成功登录后&#xff0c;用户可以访问个人中心&#xff0c;进行修改密码和个人信息管理。用户管理模块允许管…

C语言链接数据库

目录 使用 yum 配置 mysqld 环境 查看 mysqld 服务的版本 创建 mysql 句柄 链接数据库 使用数据库 增加数据 修改数据 查询数据 获取查询结果的行数 获取查询结果的列数 获取查询结果的列名 获取查询结果所有数据 断开链接 C语言访问mysql数据库整体源码 通过…

中间件--ClickHouse-9--MPP架构(分布式计算架构)

1、MPP 架构基础概念 MPP(Massively Parallel Processing 大规模并行处理) 是一种分布式计算架构&#xff0c;专门设计用来高效处理大规模数据集。在这种架构下*&#xff0c;数据库被分割成多个部分&#xff0c;每个部分可以在不同的服务器节点上并行处理*。这意味着&#xff…

分布式计算领域的前沿工具:Ray、Kubeflow与Spark的对比与协同

在当今机器学习和大数据领域&#xff0c;分布式计算已成为解决大规模计算问题的关键技术。本文将深入探讨三种主流分布式计算框架——Ray、Kubeflow和Spark&#xff0c;分析它们各自的特点、应用场景以及如何结合它们的优势创建更强大的计算平台。 Spark批量清洗快&#xff0c;…

每天学一个 Linux 命令(20):find

​​可访问网站查看,视觉品味拉满: http://www.616vip.cn/20/index.html find 是 Linux 系统中最强大的文件搜索工具之一,支持按名称、类型、时间、大小、权限等多种条件查找文件,并支持对搜索结果执行操作(如删除、复制、执行命令等)。掌握 find 可大幅提升文件管理效率…

Winform发展历程

Windows Forms (WinForms) 发展历程 起源与背景&#xff08;1998-2002&#xff09; Windows Forms&#xff08;简称WinForms&#xff09;是微软公司推出的基于.NET Framework的GUI&#xff08;图形用户界面&#xff09;开发框架&#xff0c;于2002年随着.NET Framework 1.0的…

npx 的作用以及延伸知识(.bin目录,npm run xx 执行)

文章目录 前言原理解析1. npx 的作用2. 为什么会有 node_modules/.bin/lerna3. npx 的查找顺序4. 执行流程总结1&#xff1a; 1. .bin 机制什么是 node_modules/.bin&#xff1f;例子 2. npx 的底层实现npx 是如何工作的&#xff1f;为什么推荐用 npx&#xff1f;npx 的特殊能力…

本地部署DeepSeek-R1(Dify升级最新版本、新增插件功能、过滤推理思考过程)

下载最新版本Dify Dify1.0版本之前不支持插件功能&#xff0c;先升级DIfy 下载最新版本&#xff0c;目前1.0.1 Git地址&#xff1a;https://github.com/langgenius/dify/releases/tag/1.0.1 我这里下载到老版本同一个目录并解压 拷贝老数据 需先停用老版本Dify PS D:\D…

【ubuntu】在Linux Yocto的基础上去适配Ubuntu的wifi模块

一、修改wifi的节点名 1.找到wifi模块的PID和VID ifconfig查看wifi模块网络节点的名字&#xff0c;发现是wlx44876393bb3a&#xff08;wlxmac地址&#xff09; 通过udevadm info -a /sys/class/net/wlx44876393bba路径的命令去查看wlx44876393bba的总线号&#xff0c;端口号…

25软考新版系统分析师怎么备考?重点考哪些?(附新版备考资源)

软考系统分析师&#xff08;高级资格&#xff09;考试涉及知识面广、难度较大&#xff0c;需要系统化的复习策略。以下是结合考试大纲和历年真题整理的复习重点及方法&#xff1a; 一、明确考试结构与分值分布 1.综合知识&#xff08;选择题&#xff0c;75分&#xff09; 2…

PyTorch入门------卷积神经网络

前言 参考&#xff1a;神经网络 — PyTorch Tutorials 2.6.0cu124 文档 - PyTorch 深度学习库 一个典型的神经网络训练过程如下&#xff1a; 定义一个包含可学习参数&#xff08;或权重&#xff09;的神经网络 遍历输入数据集 将输入通过神经网络处理 计算损失&#xff08;即…

Edge浏览器安卓版流畅度与广告拦截功能评测【不卡还净】

安卓设备上使用浏览器的体验&#xff0c;很大程度取决于两个方面。一个是滑动和页面切换时的反应速度&#xff0c;另一个是广告干扰的多少。Edge浏览器的安卓版本在这两方面的表现比较稳定&#xff0c;适合日常使用和内容浏览。 先看流畅度。Edge在中端和高端机型上启动速度快&…

Docker 和 Docker Compose 使用指南

Docker 和 Docker Compose 使用指南 一、Docker 核心概念 镜像&#xff08;Image&#xff09; &#xff1a;应用的静态模板&#xff08;如 nginx:latest​&#xff09;。容器&#xff08;Container&#xff09; &#xff1a;镜像的运行实例。仓库&#xff08;Registry&#xf…

vue3环境搭建、nodejs22.x安装、yarn 1全局安装、npm切换yarn 1、yarn 1 切换npm

vue3环境搭建 node.js 安装 验证nodejs是否安装成功 # 检测node.js 是否安装成功----cmd命令提示符中执行 node -v npm -v 设置全局安装包保存路径、全局装包缓存路径 在node.js 安装路径下 创建 node_global 和 node_cache # 设置npm全局安装包保存路径&#xff08;新版本…

Python人工智能 使用可视图方法转换时间序列为复杂网络

基于可视图方法的时间序列复杂网络转换实践 引言 在人工智能与数据科学领域&#xff0c;时间序列分析是一项基础且重要的技术。本文将介绍一种创新的时间序列分析方法——可视图方法&#xff0c;该方法能将时间序列转换为复杂网络&#xff0c;从而利用复杂网络理论进行更深入…

spring:加载配置类

在前面的学习中&#xff0c;通过读取xml文件将类加载&#xff0c;或他通过xml扫描包&#xff0c;将包中的类加载。无论如何都需要通过读取xml才能够进行后续操作。 在此创建配置类。通过对配置类的读取替代xml的功能。 配置类就是Java类&#xff0c;有以下内容需要执行&#…

从零搭建一套前端开发环境

一、基础环境搭建 1.NVM(Node Version Manager)安装 简介 nvm&#xff08;Node Version Manager&#xff09; 是一个用于管理多个 Node.js 版本的工具&#xff0c;允许开发者在同一台机器上轻松安装、切换和使用不同版本的 Node.js。它特别适合需要同时维护多个项目&#xff…

金融数据库转型实战读后感

荣幸收到老友太保科技有限公司数智研究院首席专家林春的签名赠书。 这是国内第一本关于OceanBase数据库实际替换过程总结的的实战书。打个比方可以说是从战场上下来分享战斗经验。读后感受颇深。我在这里讲讲我的感受。 第三章中提到的应用改造如何降本。应用改造是国产化替换…