开发者问题收集

React Native 在 Animated.Image 上错开动画时收到 TypeError:未定义不是对象(评估“value.getValue”)

2020-02-12
985

我试图交错两个动画,其中有一个图像淡入屏幕,然后向下平移。(我正在制作种植种子的动画)

种子是它自己的组件:

import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { Text, View, Image, Animated, StyleSheet } from 'react-native';
import seed from '../images/seed.png';

export default class SeedComponent extends Component {

    state = {
        opacity: new Animated.Value(0),
        movement: new Animated.Value(0)
    }

    componentDidMount() {
        const fadeAnimation = 
        Animated.timing(this.state.opacity, {
            toValue: 1,
            duration: 1000,
            useNativeDriver: true
        });

        const moveAnimation = 
        Animated.timing(this.state.movement, {
            toValue: 100,
            duration: 500,
            useNativeDriver: true
        });

        Animated.stagger(500,[
            fadeAnimation,
            moveAnimation
          ]).start();
    }

    render() {
        const animationStyles = {
            opacity: this.state.fadeAnimation,
            transform: [
              { translateY: this.state.moveAnimation},
            ]
          };
        return (
            <View>
            <Animated.Image source={seed} style={[styles.image, animationStyles]} ></Animated.Image>
            </View>
        );
      }
    }


const styles = StyleSheet.create({
    container: {  
      flex: 1, 
      flexDirection: 'column',
      justifyContent: 'center',
      alignItems:'center'
    },
    image: {
        width:100,
        height:100

    }
  });

我将其导入 App.js 文件中。

但是,我不断收到以下错误:

TypeError: undefined is not an object (evaluating 'value.getValue')

错误

我已经在

state = {
        opacity: new Animated.Value(0),
        movement: new Animated.Value(0)
    }
中定义了值

因此,我认为使用 ComponentDidMount 是可以的。但是,我不一定需要使用它。我只想能够在单个图像上按顺序或交错地显示多个动画。

我怀疑错误可能出在 <Animated.Image> 标签上,但我无法找到解决方法。

2个回答
 const animationStyles = {
            opacity: this.state.fadeAnimation,
            transform: [
              { translateY: this.state.moveAnimation},
            ]
          };

fadeAnimation 和 moveAnimation 不是您的动画值。其不透明度和移动。将其更改为

 const animationStyles = {
                opacity: this.state.opacity,
                transform: [
                  { translateY: this.state.movement},
                ]
              };
Sick Ranchez
2020-02-12

您是否尝试过将状态初始化移至构造函数?我不认为这是问题所在,但是,我一直都是这样做的,而且在我读过的所有文档中都是如此。

Jacob
2020-02-12