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