React Native Animated singleValue.stopTracking不是一个函数

时间:2016-03-13 16:04:20

标签: react-native

我有以下代码在React Native

中制作动画
Animated.timing(
    this.state.absoluteChangeX,
    {toValue: 0},
).start(function() {
    this.lastX = 0;
    this.lastY = 0;
}); 

非常简单,但无论何时触发,我都会收到错误: singleValue.stopTracking is not a function

以下是错误发生的地方:

/react-native/Libraries/Animates/src/AnimtaedImplementation.js

var timing = function(
  value: AnimatedValue | AnimatedValueXY,
  config: TimingAnimationConfig,
): CompositeAnimation {
  return maybeVectorAnim(value, config, timing) || {
    start: function(callback?: ?EndCallback): void {
      var singleValue: any = value;
      var singleConfig: any = config;
      singleValue.stopTracking(); // <--------------- HERE!!!
      if (config.toValue instanceof Animated) {
        singleValue.track(new AnimatedTracking(
          singleValue,
          config.toValue,
          TimingAnimation,
          singleConfig,
          callback
        ));
      } else {
        singleValue.animate(new TimingAnimation(singleConfig), callback);
      }
    },

    stop: function(): void {
      value.stopAnimation();
    },
  };
};

我不是非常精通typeScript,但是var singleValue: any意味着“singleValue”可以是任何类型。就我而言,这是一个数字。由于数字没有方法,因此这是错误的。

我做错了吗?

3 个答案:

答案 0 :(得分:66)

您希望设置动画的值必须是Animated.Value的实例或其子类型之一。初始化状态时,它看起来应该是这样的:

getInitialState() {
  return { absoluteChangeX: new Animated.Value(0) };
}

框架方法中的类型声明是any的事实只是缺少约束,而不是将任何值传递给它的明确邀请。

有关更多示例,请参阅Animated docs

答案 1 :(得分:0)

当我忘记将变量设置为引用的 .current 时,有时会遇到这个问题(而是使用 React 钩子):

function MyComponent() {
    const animatedValue = useRef(new Animated.Value(0.0)).current; // Notice the .current
}

这可能不一定能回答最初的问题,但在使用 React hooks 时遇到此错误的开发人员可能会在这里结束,所以也许它会对某人有所帮助。

答案 2 :(得分:0)

我遇到了这个问题,因为我使用了动画值 (2) 而不是对象 (1)

const animatedValue = useRef(new Animated.Value(0.0)).current; // (1)
const transform = animatedValue.interpolate({
  inputRange: [0.0, 1.0],
  outputRange: [0, 100]
}); // (2)

Animated.timing(animatedValue, { // USE animatedValue, NOT transform HERE!
  toValue: 1.0,
  duration: 3000,
});

希望这可以帮助任何不熟悉 React Native Animation 的人(比如我:))...