前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >React-Spring:🚀🚀🚀让你的应用栩栩如生

React-Spring:🚀🚀🚀让你的应用栩栩如生

原创
作者头像
萌萌哒草头将军
发布于 2023-09-07 16:05:06
发布于 2023-09-07 16:05:06
1.3K11
代码可运行
举报
文章被收录于专栏:前端框架前端框架
运行总次数:1
代码可运行

文章同步在公众号:萌萌哒草头将军,欢迎关注!

🚀 React-Spring 是干啥的

React-Spring 是一个用于构建交互式、数据驱动和动画 UI 组件的库。它可以为 HTMLSVGNative ElementsThree.js 等制作动画。

🚀 React-Spring 优点

  1. 高性能和流畅的动画效果: React-Spring 基于物理动画原理,通过使用 requestAnimationFrameWeb Animations API,以及针对性能进行了优化,可以实现高性能和流畅的动画效果。
  2. 功能丰富:React-Spring 提供了丰富的动画功能,包括弹簧动画、衰减动画、缩放、旋转、平移等效果。它还支持复杂的动画序列和交互式动画,可以创建出各种复杂的动画效果。
  3. 简化的 APIReact-Spring 的 API 设计简洁而直观,易于学习和使用。它使用了类似于 React Hooks 的方式来管理动画状态,使得在组件中创建和控制动画变得非常简单。
  4. 与 React 生态系统的良好集成: React-Spring 与 React 框架紧密集成,可以无缝地与其他 React 组件和库一起使用。它可以与 React 的生命周期方法和钩子函数配合使用,使得动画的启动、暂停、结束等操作更加灵活和可控。
  5. 跨平台支持: React-Spring 不仅可以在 Web 应用程序中使用,还可以在移动端应用程序中使用。它支持 React Native,可以在 React Native 项目中创建原生移动端应用的动画效果。

🚀 一些重要的概念

为了更好的掌握,我们在开始之前了解它的几个重要概念

💎 动画元素(Animated Elements)

动画元素是指在 React-Spring 中用于创建动画效果的组件或 DOM 元素。你可以将任何组件或 DOM 元素包装在 animated 函数中,以创建一个动画元素。例如,animated.div 将一个 <div> 元素包装成动画元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { animated } from '@react-spring/web'

// ✅ 正常工作
<animated.div />

// ❌由于mesh不是动画元素,所以这不会工作
<animated.mesh />

💎 useSpring 钩子函数:

useSpringReact-Spring 提供的一个自定义钩子函数,用于创建动画的状态和配置。通过调用 useSpring,你可以定义动画的初始状态和目标状态,以及一些可选的配置参数。useSpring 返回一个包含动画状态和控制方法的对象,你可以将这些状态应用到需要动画的元素上,从而实现动画效果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { useSpring, animated } from '@react-spring/web'

export default function MyComponent() {

  const springs = useSpring({
    from: { x: 0 },
    to: { x: 100 },
  })

  return (
    <animated.div
      style={{
        width: 80,
        height: 80,
        background: '#ff6d6d',
        borderRadius: 8,
        ...springs,
      }}
    />
  )
}

你将会看到,当页面刷新时,div元素从左边轻轻划入。

需要说明的是,useSpring 的返回值根据参数的类型不同而不同。

当参数是对象时,返回的是 style 对象,如上。

当参数为函数时,返回的是包含 style 对象和命令 api 接口。如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { useSpring, animated } from '@react-spring/web'

export default function MyComponent() {
  
  const [springs, api] = useSpring(() => ({
    from: { x: 0 },
  }))
  
  const handleClick = () => {
    api.start({
      from: {
        x: 0,
      },
      to: {
        x: 100,
      },
    })
  }
  
  return (
    <animated.div
      onClick={handleClick}
      style={{
        width: 80,
        height: 80,
        background: '#ff6d6d',
        borderRadius: 8,
        ...springs,
      }}
    />
  )
}

好了,我们介绍完了两个基本的概念,那你已经算是入门了,但是,React-Spring 还提供了更多的高级功能。

🚀 其他的一些重要 API

💎 useSprings

同时控制多个 useSpring 渲染

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { useSprings, animated } from '@react-spring/web'

export default function MyComponent() {

  const springs = useSprings(12, {
    from: { opacity: 0 },
    to: { opacity: 1 },
  })

  return (
    <div>
      {springs.map(props => (
        <animated.div style={props}>Hello World</animated.div>
      ))}
    </div>
  )
}

💎 轨迹 useTrail

同时控制多个 useSpring 渲染,和 useSprings 不同的是,每个 useSpring 元素会依次展开

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { useTrail, animated } from '@react-spring/web'

export default function MyComponent() {

  const trails = useTrail(12, {
    from: { opacity: 0 },
    to: { opacity: 1 },
  })

  return (
    <div>
      {trails.map(props => (
        <animated.div style={props}>Hello World</animated.div>
      ))}
    </div>
  )
}

💎 控制器 Controller

每个useSpring实际上都是一个Controller。因此,当您使用钩子时,useSpring您会初始化一个新Controller类,并且当您将参数 n 传递给钩子时useSprings,您将创建 n 个数量的Controller

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { useState, useRef } from 'react'
import { Controller, animated } from '@react-spring/web'

function AnimatedComponent() {
  const [isShowing, setIsShowing] = useState(false)
  const animations = useRef(new Controller({ opacity: 0 }))

  const toggle = () => {
    animations.current.start({ opacity: isShowing ? 1 : 0 })
    setIsShowing(!isShowing)
  }

  return (
    <>
      <button onClick={toggle}>click</button>
      <animated.div style={animations.current.springs}>I will fade</animated.div>
    </>
  )
}

💎 调整窗口大小:useResize

自动监听视图窗口大小的改变,适时的做出反应。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { useResize, animated } from '@react-spring/web'

function MyComponent() {
  const { width, height } = useResize()
  return <animated.div style={{ width, height }}>Hello World</animated.div>
}

💎 监听可视区域:useInView

当元素进入可视区域时,选择动画元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { useInView, animated } from '@react-spring/web'

function MyComponent() {
  const [ref, inView] = useInView()
  return <animated.div ref={ref}>{inView ? 'Hello World' : null}</animated.div>
}

🚀 总结

React-Spring 是一个非常优秀的动画库,它的接口 hook化的设计、常用场景的完美支持,十分贴合react的生态系统,使得它在 Github 斩获了 26.3kstar,所以这是一款值得推荐的库。

🚀 最后

今天的分享就到这了,感谢各位的阅读,文章中如果有纰漏的地方欢迎指正!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
Hi 您好呀,您近期内容创作表现突出,已入选腾讯云开发者社区内容共创官计划。内容共创官计划是腾讯云开发者社区面向社区重点潜力创作者打造的内容创作扶持机制,提供一系列技术创作教程、独家有奖创作激励、活动优先参会、社区流量曝光等资源。请您添加社区助理微信(微信号:yun_assistant)沟通加入计划。
Hi 您好呀,您近期内容创作表现突出,已入选腾讯云开发者社区内容共创官计划。内容共创官计划是腾讯云开发者社区面向社区重点潜力创作者打造的内容创作扶持机制,提供一系列技术创作教程、独家有奖创作激励、活动优先参会、社区流量曝光等资源。请您添加社区助理微信(微信号:yun_assistant)沟通加入计划。
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
一文学会用 react-spring 做弹簧动画
一般的动画我们会用 css 的 animation 和 transition 来做,但当涉及到多个元素的时候,事情就会变得复杂。
神说要有光zxg
2024/01/29
2980
一文学会用 react-spring 做弹簧动画
最受欢迎的 5 个 React 动画库
React 是用于构建用户界面的库。对于 React 前端开发人员而言,从动画文本或图像到复杂的 3D 动画,在网页上实现动画是您日常工作不可或缺的一部分。动画可以在构建 React 应用程序时帮助改善整体用户体验。
程序狗
2021/12/08
1.5K0
使用React animated/useSpring报错​Got NaN while animating的解决方法
使用 React 的 <animated.div /> 时,发现控制台一直打印报错/报警:Got NaN while animating: SpringValue {id: 2899, key: 'width', _priority: 0, animation: Animation, queue: undefined, …} 。
德顺
2022/01/12
4890
使用 React 实现页面过渡动画仅需四个步骤【译】
在本文中,我将向你展示如何使用 ReactTransitionGroup 和 Animated 库中的生命周期方法来实现页面的过渡效果。
疯狂的技术宅
2019/03/28
1.4K0
使用 React 实现页面过渡动画仅需四个步骤【译】
学用Hook写React组件——通用弹出层
如上所述,主要的实现方式就createPortal、render、appendChild三种方式,appendChild无法直接监听销毁和创建过程,render的方式无法在内部读取到context,并且需要处理切换页面的销毁。最终选择createPortal的方式。
gary12138
2022/10/05
1.8K0
学用Hook写React组件——通用弹出层
一个支持丰富鼠标和触摸手势的 React 库
Use Gesture是一个支持丰富鼠标和触摸手势的 React 库 。Use Gesture可以将丰富的鼠标和事件绑定到任何组件或视图。通过接收到的数据,设置手势变得非常简单,而且通常只需要几行代码。
老鱼的日常
2023/08/25
4510
一个支持丰富鼠标和触摸手势的 React 库
React 性能优化完全指南,将自己这几年的心血总结成这篇!
本文分为三部分,首先介绍 React 的工作流,让读者对 React 组件更新流程有宏观的认识。然后列出笔者总结的一系列优化技巧,并为稍复杂的优化技巧准备了 CodeSandbox 源码,以便读者实操体验。最后分享笔者使用 React Profiler 的一点心得,帮助读者更快定位性能瓶颈。
ConardLi
2021/04/07
7.9K0
React 性能优化完全指南,将自己这几年的心血总结成这篇!
useTypescript-React Hooks和TypeScript完全指南
React v16.8 引入了 Hooks,它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。这些功能可以在应用程序中的各个组件之间使用,从而易于共享逻辑。Hook 令人兴奋并迅速被采用,React 团队甚至想象它们最终将替换类组件。
前端森林
2020/04/23
8.5K0
useTypescript-React Hooks和TypeScript完全指南
一款美轮美奂的JavaScript 小项目
大家好,我是TJ 一个励志推荐10000款开源项目与工具的程序员 周末啦,TJ君给大家介绍1款有意思的JavaScript 项目放松一下。 use-gesture 这是一款通过事件绑定来让鼠标和触摸手势变得更加丰富多彩的React库。 而且不需要太多的复杂代码只需要很简单的几行就够了。 小伙伴们可以单独使用,也可以和react-spring这样的库一起使用。 如何安装 React #Yarn yarn add @use-gesture/react #NPM npm install @use-gesture
程序猿DD
2021/12/06
7310
一款美轮美奂的JavaScript 小项目
129.精读《React Conf 2019 - Day2》
这是继 精读《React Conf 2019 - Day1》 之后的第二篇,补充了 React Conf 2019 第二天的内容。
黄子毅
2022/03/14
1.2K0
129.精读《React Conf 2019 - Day2》
34. Vue-使用JavaScript 钩子函数实现半场动画
Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。 包括以下工具:
Devops海洋的渔夫
2020/06/15
1.4K0
34. Vue-使用JavaScript 钩子函数实现半场动画
styled-components 深入浅出 (二) : 高阶组件
上篇文章介绍了 styled-components 的一些基础用法,这篇文章接着介绍写它的一些高阶组件用法。
andyhu
2023/09/01
5430
[day-ui] Alert 组件学习
从样式功能来看,整体不是很复杂,alert 组件主要包括了主题色,title,关闭按钮,关闭事件,居中,加粗等
测不准
2021/06/02
3.6K0
React Native UI界面还原,组件布局与动画效果
写React Native UI和写 Android XML layout 布局 ,个人感觉是大同小异
周陆军博客
2023/04/09
4.8K0
Vue.js 2 基础用法
在底层的实现上,Vue将模板编译成虚拟DOM渲染函数。结合响应式系统,Vue能智能计算出最少需要重新渲染多少组件,并把DOM操作次数减到最少。
Cellinlab
2023/05/17
7.2K0
Vue.js 2 基础用法
React 轮播动画探索
1. 前言 1.1. 氛围气泡需求 最近投入了一个需求,遇到一个需要用动画去实现的场景。 我们的产品大大管它叫氛围气泡,在很多应用(淘宝、抖音、bilibili)的直播间场景都会有类似这样营造氛围感的组件,能够让你感知到其他用户在当前直播间的行为。 这个东西看起来转瞬即逝的,但背后其实是基于一套和 push 通道相关的设计: 前人栽树后人乘凉,所幸大佬们把 push 消息中心 和 后台服务 都建设得很完善,所以这次开发我只需要做这么一件事情: 设置监听 push 的回调,拿到数据渲染对应组件。 1.2.
用户1097444
2022/06/29
2.5K0
React 轮播动画探索
团队 React 代码规范制定
团队中每个开发人员的水平不同,技术关注点不同,如果没有一份代码规范的参照和约束,那么项目中的代码将会风格迥异,难以维护,为保证代码质量和风格统一,特此拟定一份《团队React 代码规范》,这样整个团队的开发人员可以参照这份代码规范进行编码,从而让团队的代码风格统一,利于维护。如果你的团队还没有这么一份 React 代码规范,也许这正是你需要的;如果你的团队已经有了 React 代码规范,这份规范也许能起到锦上添花的效果。
IT大咖说
2019/11/25
1.6K0
React Native动画详解
在移动开发中,动画是提高用户体验不可缺少的一个元素。在React Native中,动画API提供了一些现成的组件:Animated.View,Animated.Text和Animated.Image默认支持动画。动画API会调用iOS或者Android的本地代码来完成这些组件的位移、大小等动画。 在React Native中,Animated创建过程如下: 创建Animated.Value,设置初始值,比如一个视图的opacity属性,最开始设置Animated.Value(0),来表示动画的开始时候,视图
xiangzhihong
2018/01/26
3.5K0
从零开始学 Web 之 Vue.js(五)Vue的动画
在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。现在就让我们一起进入 Web 前端学习的冒险之旅吧!
Daotin
2018/09/30
1.3K0
从零开始学 Web 之 Vue.js(五)Vue的动画
React 动画框架简介
由于 React 加持了虚拟 DOM 等诸多特性,所以在 React 上实现常规的动画效果有一些特别之处。本文不会深入探讨 React 对动画的处理逻辑,只会简单地演示如何使用 React 创建动画效果。 React 插件 React 官方提供了两个插件用于处理动画效果:一个是偏底层的 react-addons-transition-group,一个是在前者基础上进一步封装的 react-addons-css-transition-group。在使用它们之前,需要先检查下你使用的是哪种类型的 React 版
xiangzhihong
2018/01/26
1.4K0
相关推荐
一文学会用 react-spring 做弹簧动画
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文