键盘监听器无法更改this.state

时间:2017-06-05 11:55:55

标签: react-native react-native-android

我希望在打开键盘时执行动画,并在关闭时恢复。

问题是:

  

undefined不是对象(评估' this.state.scaleValue')

我有一个很好用的Keyboard.listener。

州:

this.state = {
      scaleValue: new Animated.Value(0),
    }

动画视图

<Animated.View style={styles.logoContainer,
  {
      transform: [
          {scale: logoScale}
      ]
  }
}>
  <Image source={require('./someimage.png')} style={{width: 64, height: 64}} />
</Animated.View>

插值

const logoScale = this.state.scaleValue.interpolate({
      inputRange: [0, 0.5, 1],
      outputRange: [1, 0.5, 0]
    });

触发

  _keyboardDidShow () {
    this.state.scaleValue.setValue(0);
    Animated.timing(
        this.state.ScaleValue,
        {
          toValue: 1,
          duration: 300,
          easing: Easing.easeOutBack
        }
    ).start();
  }

因此,当我将触发器中的代码放入函数并使用Touchable调用onPress时,它可以工作。

1 个答案:

答案 0 :(得分:2)

this在提供给Animated.timing的函数中没有相同的上下文。

您需要绑定方法:

this._keyboardDidShow = this._keyboardDidShow.bind(this)

如果这不起作用,您甚至可以将let me = this设置为timing的呼叫之上(并在me的正文中将其称为timing方法调用)。