motifySvg()

import { motifySvg } from 'moti/svg'

A higher-order component that turns any React Native SVG component into an animated moti component. It's the same as motify, but for SVG elements.

import { motifySvg } from 'moti/svg'
import { Svg, Rect } from 'react-native-svg'
const MotiRect = motifySvg(Rect)()

You can now pass any SVG props to the animate property, and they will animate there:

<MotiRect
animate={{
// height sequence animation
height: [50, 100],
x: visible ? 0 : 10,
}}
transition={{
// default all to timing
type: 'timing',
x: {
// override the transition for x
},
}}
/>

This functionality is compatible with all Moti features, including hooks like useDynamicAnimation:

import { Rect } from 'react-native-svg'
import { motifySvg } from 'moti/svg'
import { useDynamicAnimation } from 'moti'
const MotiRect = motifySvg(Rect)()
export default function App() {
const animation = useDynamicAnimation<ComponentProps<typeof Rect>>(() => ({
x: 0,
}))
return <MotiRect state={animation} />
}

How it works#

Under the hood, motifySvg runs Animated.createAnimatedComponent for you, so don't call that yourself.

Instead, just pass a normal View (or its equivalent).

Notice that motifySvg() returns a function. At the moment, the function it returns doesn't take any arguments. But I like this composition pattern, so I built the API this way to account for using the returned function in the future.