React Spring实战之API以及animated 组件的运用

简介: React Spring实战之API以及animated 组件的运用

API

在这里插入图片描述

react-spring库中与动画相关的API支持两种不同的使用渲染道具和react钩子的方法。接下来,我们将介绍react hook的一些动画相关API:
react spring hook创建的spring动画的基本配置可以通过usestate、useref等进行外部控制,以更改动画。动画过渡属性(从、到)也可以设置为状态控制,但无法实现过渡效果,并且变换非常严格
动画定义API(负责创建动画)
Usespring:创建一个简单的动画弹簧
使用弹簧:创建一组同时执行的弹簧
Usetrail:创建一组按顺序执行的弹簧(创建的弹簧属性一致)
使用转换:在生命周期发生变化时添加动画,如已安装/未安装的组件
Usechain:用于自定义spring执行顺序
动画绘制API(负责动画执行)
动画:是实现react spring动画效果的基础。通过上述API生成的所有弹簧必须通过动画标记才能绘制动画(动画的执行器)
插值:将spring中执行过程的转换属性值与动画XXX绑定(添加到属性,如style\classname)、数据映射或属性值修改(绑定动画和执行器)进行比较
默认配置
配置:弹簧属性的默认值(影响动画的速度、加速度、延迟和错误等基本属性)(官方示例)
to 属性可以是异步函数(过渡效果从上到下依次实现)

{
 to: async (next: any, cancel: any) => {
    await next({ opacity: 1, color: '#ffaaee', fontSize: 30 });
    await next({ opacity: 0.5, color: 'rgb(14,26,19)', fontSize: 20 });
  },
}

to 属性可以是数组(过渡效果从左到右依次实现)

{ to: [{opacity: 1, color: '#ffaaee'}, {opacity: 0, color: 'rgb(14,26,19)'}], }

to属性的值可以与其他属性平级(props的其他属性)

{
  from: { o: 0.3, xyz: [0, 0, 0], color: 'red' },
  o: 1,
  xyz: [10, 20, 5],
  color: 'green',
  reverse: visible,
}

useSpring

Usespring用于创建单独的动画,这是API其余部分的基础。它接收包含动画属性的对象或返回值为对象作为参数的箭头函数
参数为object
接收usespringprops类型的对象
返回animatedvalue类型的对象
可以通过外部usestate控制动画属性的更改。通过ref修改状态并调整重置和其他属性将执行相应的动画

config.default     { mass: 1, tension: 170, friction: 26 }
config.gentle    { mass: 1, tension: 120, friction: 14 }
config.wobbly    { mass: 1, tension: 180, friction: 12 }
config.stiff     { mass: 1, tension: 210, friction: 20 }
config.slow         { mass: 1, tension: 280, friction: 60 }
config.molasses     { mass: 1, tension: 280, friction: 120 }

参数是一个箭头函数,返回对象
arrow函数返回usespringprops类型的对象
返回[animationvalue,set,stop]的数组
动画属性的更改只能通过set函数重新传递。可以使用“停止”方法提前结束动画
返回值为对象时 useSpring
返回值为数组 useSprings useTrail
xxx 为from和to属性中返回的属性

interface AnimatedValue {
  [key in (form & to)]: AnimatedInterpolation;
}
type AnimatedValues = Array<AnimatedValue>;

animated 组件

在react弹簧挂钩中使用动画相对简单。您可以直接使用animated XXX导出要从animated中使用的HTML标记,然后将spring直接分配给属性,例如style
无需附加任何属性,直接使用传入from和to的值作为style的属性。
springs当生成spring动画数组时,通过map解构获取单个spring,然后将值添加给animated。
通过interpolate获取传入的参数,返回新的style属性

const spring = useSpring({...})

<animated.div style={spring}></animated.div>
<animated.div style={{transfrom: spring.xxx.interpolate(x=>`translate2d(${x}px, 0)`)}}></animated.div>

const springs = useSpring(5, [{...}])
// 
springs.map((spring, index) => (<animated.div key={index} style={{...spring}} />))}
springs.map((spring, index) => (<animated.div key={index} style={{transfrom: spring.xxx.interpolate(x=>`translate2d(${x}px, 0)`)}} />))}

UseTransitionProps 生命周期动画属性与返回值

from的功能与initial的功能相同,initial是enter的起始值。但是,“初始”仅在首次加载组件时有效,而“自”在每次装入组件时有效。初始优先级较高

interface UseTransitionProps {
  // 动画弹簧基本属性
  config?: SpringConfig | ((item: TItem) => SpringConfig)
  // 如果为true,key值相同的Spring将被重用
  unique?: boolean default false
  // 动画开始前的延迟(毫秒),每次进入/更新和离开时加起来
  trail?: number
  // 动画开始的起始属性(每次mounted是enter的起始值)
  from?: InferFrom<DS> | ((item: TItem) => InferFrom<DS>)
  // 组件mounted的动画属性
  enter?: InferFrom<DS> | InferFrom<DS>[] | ((item: TItem) => InferFrom<DS>)
  // 组件unmounted的动画属性
  leave?: InferFrom<DS> | InferFrom<DS>[] | ((item: TItem) => InferFrom<DS>)
  // 组件的属性更新时的动画属性(Item的值变化时,在enter之后启动,可以通过hook控制state变化)
  update?: InferFrom<DS> | InferFrom<DS>[] | ((item: TItem) => InferFrom<DS>)
  // 动画初始值,第一次加载的值(只有第一次mounted有效)
  initial?: InferFrom<DS> | ((item: TItem) => InferFrom<DS>) | null
  // 在组件销毁时调用
  onDestroyed?: (isDestroyed: boolean) => void
}

interface UseTransitionResult {
  // items的单个项,如果items是boolean则为boolean的值
  item: TItem
  // key值,如果不设置为null,则默认key=>key自动生成
  key: string
  // 当前值状态 inital、enter、leave、update
  state: State
  // 动画属性
  props: AnimatedValue
}
相关文章
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
71 2
|
2月前
|
Java API 数据库
如何使用Spring Boot构建RESTful API,以在线图书管理系统为例
【10月更文挑战第9天】本文介绍了如何使用Spring Boot构建RESTful API,以在线图书管理系统为例,从项目搭建、实体类定义、数据访问层创建、业务逻辑处理到RESTful API的实现,详细展示了每个步骤。通过Spring Boot的简洁配置和强大功能,开发者可以高效地开发出功能完备、易于维护的Web应用。
73 3
|
2月前
|
IDE Java API
基于Spring Boot REST API设计指南
【10月更文挑战第4天】 在现代的软件开发中,RESTful API已经成为了构建网络应用的标准之一。它通过HTTP协议提供了与资源交互的方式,使得不同的应用程序能够进行数据交互。Spring Boot作为一个功能强大的框架,它简化了配置和开发流程,成为了构建RESTful API的理想选择。本文将详细介绍如何在Spring Boot中设计和实现高质量的RESTful API,并提供一些最佳实践。
58 1
|
1天前
|
存储 安全 Java
Spring Boot 编写 API 的 10条最佳实践
本文总结了 10 个编写 Spring Boot API 的最佳实践,包括 RESTful API 设计原则、注解使用、依赖注入、异常处理、数据传输对象(DTO)建模、安全措施、版本控制、文档生成、测试策略以及监控和日志记录。每个实践都配有详细的编码示例和解释,帮助开发者像专业人士一样构建高质量的 API。
|
2月前
|
缓存 Java API
基于Spring Boot REST API设计指南
【10月更文挑战第11天】 在构建现代Web应用程序时,RESTful API已成为一种标准,使得不同的应用程序能够通过HTTP协议进行通信,实现资源的创建、读取、更新和删除等操作。Spring Boot作为一个功能强大的框架,能够轻松创建RESTful API。本文将详细介绍如何在Spring Boot中设计和实现高质量的RESTful API。
137 61
|
22天前
|
Java 测试技术 API
详解Swagger:Spring Boot中的API文档生成与测试工具
详解Swagger:Spring Boot中的API文档生成与测试工具
34 4
|
28天前
|
前端开发 JavaScript API
探究 React Hooks:如何利用全新 API 优化组件逻辑复用与状态管理
本文深入探讨React Hooks的使用方法,通过全新API优化组件逻辑复用和状态管理,提升开发效率和代码可维护性。
|
26天前
|
人工智能 Java API
Spring AI Fluent API:与AI模型通信的流畅体验
【11月更文挑战第24天】随着人工智能(AI)技术的飞速发展,越来越多的应用场景开始融入AI技术以提升用户体验和系统效率。在Java开发中,与AI模型通信成为了一个重要而常见的需求。为了满足这一需求,Spring AI引入了ChatClient,一个提供流畅API(Fluent API)的客户端,用于与各种AI模型进行通信。本文将深入探讨ChatClient的底层原理、业务场景、概念、功能点,并通过Java代码示例展示如何使用Fluent API与AI模型进行通信。
37 0
|
2月前
|
自然语言处理 Java API
Spring Boot 接入大模型实战:通义千问赋能智能应用快速构建
【10月更文挑战第23天】在人工智能(AI)技术飞速发展的今天,大模型如通义千问(阿里云推出的生成式对话引擎)等已成为推动智能应用创新的重要力量。然而,对于许多开发者而言,如何高效、便捷地接入这些大模型并构建出功能丰富的智能应用仍是一个挑战。
226 6
|
2月前
|
缓存 NoSQL Java
Spring Boot与Redis:整合与实战
【10月更文挑战第15天】本文介绍了如何在Spring Boot项目中整合Redis,通过一个电商商品推荐系统的案例,详细展示了从添加依赖、配置连接信息到创建配置类的具体步骤。实战部分演示了如何利用Redis缓存提高系统响应速度,减少数据库访问压力,从而提升用户体验。
123 2
下一篇
DataWorks