Я работаю с пакетом lottie-web в файле .web.js в React Native (Expo).
Моя проблема в том, что переменная let anim не определена в функциях в useImperativeHandle. В использовании useEffect anim прекрасно работает. Например, если я обращаюсь к anim.play () сразу после инициализации в useEffect, он работает. Но с функцией play () в императиве это не работает.
В моем родительском компоненте я создаю ссылку с useRef и передаю ссылку компоненту
const lottieAnim = useRef(null);
--
let anim;
useEffect(() => {
const lottieOptions = {
container: divContainer.current,
renderer: 'svg',
loop,
autoplay,
segments: segments !== false,
animationData,
rendererSettings,
};
anim = lottie.loadAnimation({ ...lottieOptions, ...options });
// anim.play(); works here
if (onAnimationFinish) {
anim.addEventListener('complete', onAnimationFinish);
}
}, []);
useImperativeHandle(ref, () => ({
stop() {
anim.stop();
},
pause() {
anim.pause();
},
play() {
anim.play();
// anim is undefined
},
setSpeed(s) {
anim.setSpeed(s);
},
setDirection(d) {
anim.setDirection(d);
},
playSegments(s) {
anim.playSegments(s);
},
}));