无法访问Keyboard类中的功能

时间:2019-12-02 00:58:15

标签: react-native

export default someclass extends React.component{
this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide',keyboardhide);
}

keyboardhide(){
this.somefunc();
}
somefunc(){

if(mode=='up'){

  Animated.timing(
    this.state.animate.marginTop,
    {
      toValue:0,
      duration: 2000,

    }
  ).start();
  Animated.timing(
    this.state.animate.width,
    {
      toValue:this.screenmanipulate(100,'width'),
      duration: 2000,

    }
  ).start();

}

else {

  Animated.timing(
    this.state.animate.marginTop,
    {
      toValue:top,
      duration: 2000,

    }
  ).start();
  Animated.timing(
    this.state.animate.width,
    {
      toValue:width,
      duration: 2000,

    }
  ).start();

}    
render{
....

.....

}

如果我关闭了键盘,则会抛出未定义 somefunc()的错误,但 console.log()正常工作,我不知道我在哪里出问题了,

我的期望: 关键事件将触发动画

但是发生了什么事 错误未定义不是this.somefunc()

的对象

2 个答案:

答案 0 :(得分:2)

可以绑定以下代码吗?

  _keyboardDidHide = () => {
    this.somefunc();
  };

答案 1 :(得分:2)

您可以尝试将someFun移到keyboardhide方法之前。以下是我最喜欢的代码:

componendDidMount(){
this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide',this.keyboardhide);
}

componentWillUnmount(){
this.keyboardDidHideListener.remove()
}

someFun = () => {
  // you code
}

keyboardhide = () => {
this.somefunc();
}

默认情况下,箭头函数将其绑定,但是您定义方式的方法是不将其绑定。您必须手动将其绑定。我建议您使用箭头功能。有关绑定的更多信息,您可以看到此document

constructor(props) {
        super(props);
        this.keyboardhide.bind(this);
    }

javascript中的方法定义顺序很重要。为此,您可以看到此answer。它很好地解释了。