_reactNative.Keyboard.removeListener 不是一个函数

Sof*_*ory 9 react-native react-navigation

我刚刚从 RN 0.63.2 升级到 0.64.2,然后升级到 0.65.0-rc.3。现在,我在尝试在屏幕之间导航时开始遇到此异常:_reactNative.Keyboard.removeListener is not a function

\n

在此输入图像描述

\n

问题似乎出在 BottomTabBar.js 中。代码片段如下。

\n

在此输入图像描述

\n

React-navigation 版本是 4.4.0。React-navigation-tabs 版本是 1.2.0。

\n

我检查了键盘类的方法,实际上,我可以看到一个名为“removeListener”的方法。甚至自动完成也显示了这一点。

\n

在此输入图像描述

\n

另外,我可以在react-native文档中看到这个方法的存在:

\n

在此输入图像描述

\n

所以,我不明白为什么我会得到这个例外。任何帮助深表感谢。

\n

更新反应导航版本可能是一个解决方案,对此不确定,但我想如果可能的话避免这条路径,因为它到目前为止一直运行良好。

\n

谢谢。

\n

编辑:刚刚意识到第一次导航到屏幕时不会引发此异常。当我重新访问以前访问过的屏幕时会抛出该错误。

\n

Edit2:我在 Android 上看到了这种行为。还无法在 iOS 上编译该项目。

\n

Edit3npm list react-native-tab-view命令显示react-native-tab-view的不同版本

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 react-native-tab-view@2.15.1\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\xac react-navigation-drawer@1.4.0\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 react-native-tab-view@1.4.1\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\xac react-navigation-tabs@1.2.0\n  \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 react-native-tab-view@1.4.1\n
Run Code Online (Sandbox Code Playgroud)\n

我做到了npm install react-native-tab-view@1.4.1,但没有任何改变。我的意思是上面的 npm list 命令的输出发生了变化,并且全部显示了 React-native-tab-view 的版本 1.4.1,但行为没有改变。

\n

小智 7

removeListener 方法已被弃用。建议对订阅事件调用remove,而不是调用removeListener。

按如下方式替换这些行并使用patch-package提交更改 -

   componentDidMount() {
     if (Platform.OS === 'ios') {
        this.keyboardWillShow = Keyboard.addListener('keyboardWillShow', this._handleKeyboardShow);
        this.keyboardWillHide = Keyboard.addListener('keyboardWillHide', this._handleKeyboardHide);
     } else {
        this.keyboardDidShow = Keyboard.addListener('keyboardDidShow', this._handleKeyboardShow);
        this.keyboardDidHide = Keyboard.addListener('keyboardDidHide', this._handleKeyboardHide);
     }
   }
 
   componentWillUnmount() {
     if (Platform.OS === 'ios') {
        this.keyboardWillShow?.remove();
        this.keyboardWillHide?.remove();
     } else {
        this.keyboardDidShow?.remove();
        this.keyboardDidHide?.remove();
     }
   }
Run Code Online (Sandbox Code Playgroud)