首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >react-native keyboardDidShow/keyboardDidHide键盘事件不触发

react-native keyboardDidShow/keyboardDidHide键盘事件不触发
EN

Stack Overflow用户
提问于 2019-10-25 15:34:06
回答 1查看 1.3K关注 0票数 0

我正在尝试通过使用keyboardDidShow/keyboardDidHide事件来利用安卓上的键盘事件,但是没有一个事件被触发。我的订阅不正确吗?

代码语言:javascript
运行
复制
"react": "16.9.0",
"react-native": "0.61.2",

android:windowSoftInputMode="adjustResize"

https://facebook.github.io/react-native/docs/keyboard

代码语言:javascript
运行
复制
class HomeScreen extends React.Component {
  state = {
    keyboard: false,
  };

  componentDidMount() {
    this.keyboardDidShowListener = Keyboard.addListener(
      'keyboardDidShow',
      this.handleKeyboardState(true),
    );
    this.keyboardDidHideListener = Keyboard.addListener(
      'keyboardDidHide',
      this.handleKeyboardState(false),
    );
  }

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

  handleKeyboardState(state) {
    console.log('WILL SET KEYBOARD STATE TO', state);
    this.setState({keyboard: state});
  } 

...
}

我的意思是它们确实会触发,但确切地说是在组件被挂载和函数被执行的时候

代码语言:javascript
运行
复制
 BUNDLE  [android, dev] ./index.js ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 100.0% (1/1), done.

 LOG  Running "Test app" with {"rootTag":21}
 LOG  false
 LOG  WILL SET KEYBOARD STATE TO true
 LOG  WILL SET KEYBOARD STATE TO false
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-25 16:28:19

我认为问题在于你没有为你的监听器使用正确的回调签名。你能试试下面的方法吗:

代码语言:javascript
运行
复制
  componentDidMount() {
    this.keyboardDidShowListener = Keyboard.addListener(
      'keyboardDidShow',
      () => this.handleKeyboardState(true),
    );
    this.keyboardDidHideListener = Keyboard.addListener(
      'keyboardDidHide',
      () => this.handleKeyboardState(false),
    );
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58554128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档