SpringRef
Our imperative API. You can initialise it via function call, or for better practice use the hook useSpringRef. For more contextual information for this function and why it's so important, see here.
Usage
Hook
import { animated, useSpring, useSpringRef } from '@react-spring/web' function MyComponent() { const api = useSpringRef() const props = useSpring({ ref: api, from: { opacity: 0 }, to: { opacity: 1 }, }) return <animated.div style={props}>Hello World</animated.div> } Function call
import { Component, createRef } from 'react' import { Controller, animated, SpringRef } from '@react-spring/web' class AnimatedComponent extends Component { isShowing = createRef(false) api = SpringRef() animations = new Controller({ opacity: 0, ref: this.api }) toggle = () => { this.animations.start({ opacity: this.isShowing ? 1 : 0 }) this.isShowing = !this.isShowing } render() { return ( <> <button onClick={this.toggle}>click</button> <animated.div style={this.animations.springs}>I will fade</animated.div> </> ) } } Properties
| Prop | Type | Default |
|---|---|---|
current | Controller[] | [] |
Methods
Add
Add a controller to this ref.
add(ctrl: Controller<State>): void Delete
Remove a controller from this ref.
delete(ctrl: Controller<State>): void Pause
Pause some or all animations by passing SpringValue keys.
pause(): this pause(keys: OneOrMore<string>): this pause(keys?: OneOrMore<string>): this Resume
Resume some or all animations by passing SpringValue keys.
resume(): this resume(keys: OneOrMore<string>): this resume(keys?: OneOrMore<string>): this Set
Update the state of each controller without animating. Accepts either a partial state object or a function that returns a partial state object.
set(values: Partial<State>): void set(values: (index: number, ctrl: Controller<State>) => Partial<State>): void Start
Start the queued animations of each controller. Alternatively pass a ControllerUpdate object to update the state of each controller before starting the animations. Or pass a function to edit the ControllerUpdate depending on the specific Controller.
start(): AsyncResult<Controller<State>>[] start(props: ControllerUpdate<State>): AsyncResult<Controller<State>>[] start(props: ControllerUpdateFn<State>): AsyncResult<Controller<State>>[] start( props?: ControllerUpdate<State> | ControllerUpdateFn<State> ): AsyncResult<Controller<State>>[] Stop
Stop some or all of the animations by passing SpringValue keys. Additionall, cancel those animations by passing a boolean as the first argument and the keys as the second.
stop(): this stop(keys: OneOrMore<string>): this stop(cancel: boolean): this stop(cancel: boolean, keys: OneOrMore<string>): this stop(keys?: OneOrMore<string>): this stop(cancel: boolean, keys?: OneOrMore<string>): this Update
Add the same props to each controller's update queue. Or alternatively generate separate props for each controller's update queue with a function.
update(props: ControllerUpdate<State>): this update(props: ControllerUpdateFn<State>): this update(props: ControllerUpdate<State> | ControllerUpdateFn<State>): this