在useImperativeHandle函数中未定义let变量

Arbnor

我在React Native(Expo)下的.web.js文件中使用lottie-web软件包。

我的问题是在useImperativeHandle中的函数中未定义let变量anim。在useEffect动画中效果极佳。例如,如果我在useEffect初始化之后立即访问anim.play(),则它可以正常工作。但是在play()函数中它势在必行。

在我的父组件上,我使用useRef创建一个ref并将该ref传递给该组件

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);
  },
}));
埃米尔·侯赛因·埃布拉希米(Amirhossein Ebrahimi)

那是因为当React在useImperativeHandle中创建API函数时(由于闭包和对更新策略做出反应,而该更新策略不会通过变量变量触发任何更新),React没有任何意义。毕竟,有一些方法可以解决此问题,关于个人意见该怎么做,我将使用最适合我的类似方法。

添加GetApi函数

// hanlder.js
const stop = anim => anim.stop()
// api.js
const getAPI = anim => () => ({
  stop: stop.bind(this, anim),
  // or simply
  setSpeed: s => anim.setSpeed(s),

  // you can mock APIs here if anim is null or throw an Error
});

将动画存储在状态中

将anim存储在仅用于首次渲染的状态中,并在getApi useEffect的依赖项数组中使用它

const [anim, setAnim] = React.useState(null);

React.useEffect(() => {
  // initialization part
}, []);

React.useImperativeHandle(ref, getAPI(anim), [anim]);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

vim:函数中未定义的变量

来自分类Dev

函数中未定义的变量

来自分类Dev

函数中的未定义变量

来自分类Dev

函数中未定义或空变量

来自分类Dev

函数中未定义的数组变量

来自分类Dev

类中未定义的函数或变量

来自分类Dev

注意:函数+ =中的未定义变量

来自分类Dev

变量在函数中未定义

来自分类Dev

函数中的变量未定义/Javascript

来自分类Dev

嵌套函数中的未定义变量

来自分类Dev

为什么变量在方法中未定义但在Typescript的构造函数中未定义

来自分类Dev

变量在whereExist函数中变得未定义-Laravel

来自分类Dev

MATLAB中未定义的函数或变量错误

来自分类Dev

变量在JQUERY函数中获取“未定义”

来自分类Dev

如何修复此代码-函数中未定义变量

来自分类Dev

角度:成员变量在函数中未定义

来自分类Dev

MATLAB中未定义的函数或变量错误

来自分类Dev

范围变量在指令链接函数中未定义

来自分类Dev

隔离范围变量在链接函数中变得未定义

来自分类Dev

Typescript类变量在Firebase函数中返回未定义

来自分类Dev

angularJS 错误:变量未定义,即使在 isDefined() 函数中

来自分类Dev

简单matlab函数中未定义的变量

来自分类Dev

变量函数。未定义的函数

来自分类Dev

javascript:未定义变量与未定义函数

来自分类Dev

为什么在方法中未定义变量但在Typescript的构造函数中未定义变量

来自分类Dev

未定义的函数或变量Matlab

来自分类Dev

Javascript jQuery函数未定义变量

来自分类Dev

如果-则函数返回变量未定义

来自分类Dev

jQuery函数返回变量“未定义”