【问题标题】:Cannot read property '#<WebView>' of undefined react native无法读取未定义反应本机的属性“#<WebView>”
【发布时间】:2019-10-20 13:34:13
【问题描述】:

我正在 react-native 中创建一个 Webview,但是当我导航到任何页面并尝试返回时,应用程序会关闭。

我已经阅读了一些关于 STACK-OVERFLOW 的答案,并尝试了一些代码来处理 android 的后退按钮,但它没有帮助。

这是尝试过的代码:

import {
  SafeAreaView,
  StyleSheet,
  ScrollView,
  View,
  Text,
  StatusBar,
  BackHandler,
} from 'react-native';

import WebView from 'react-native-webview';

const App: () => React$Node = () => {

  const [canBack, setCanBack] = useState(false);
  useEffect(() => {
    this.backHandler = BackHandler.addEventListener('hardwareBackPress', this.handleBackPress);
    console.log('mounted')

    return () => {
      this.backHandler.remove()
      console.log('unmounted')
    }

  }, [canBack]);

  handleBackPress = () => {
    console.log('back btn pressed')
    console.log('canBack is '+canBack)
    if(canBack) {
      this.refs[myWebView].goBack();
      return true;
    }
  }


  onNavigationChange = (navState) => {
    console.log(navState);
    // console.log(navState.canGoBack)
    setCanBack(currentCanBack => navState.canGoBack);
    console.log(canBack);
  };

  return (
      <SafeAreaView style={{ flex: 1,}}>
        <StatusBar barStyle="dark-content" />
        <WebView
          ref={(c) => {this.myWebView = c} }
          source={{ uri: 'https://infinite.red' }}
          domStorageEnabled={true}
          onNavigationStateChange={(navState) => this.onNavigationChange(navState)}
        />
      </SafeAreaView>
  );
};

const styles = StyleSheet.create({
  scrollView: {
    flex: 1,
    backgroundColor: 'lightgrey',
    justifyContent: 'center',
    alignItems: 'center',
  },
});

export default App;

当我按下后退按钮时,它给了我错误“无法读取未定义反应本机的属性'#'”

【问题讨论】:

    标签: javascript android reactjs react-native react-native-webview


    【解决方案1】:

    这里我得到了这个问题的解决方案。

    我刚刚使用了 this.myWebView.goBack(); 并且成功了。 所以,当我们使用钩子并且我们在函数组件中时,可能会在 react 0.61 中,我们应该这样使用它。

    【讨论】:

      【解决方案2】:

      每: ref={(c) => {this.myWebView = c} }

      以下内容: this.refs[myWebView].goBack();

      应该是:this.myWebView.goBack();

      【讨论】:

      • 现在它给了我 “TypeError: Cannot read property 'myWebView' of undefined”的错误
      • 找到解决方案...!!刚刚使用了 this.myWebView.goBack();它奏效了。
      • 是的,我弄错了,应该是this.myWebView
      猜你喜欢
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      • 2022-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      相关资源
      最近更新 更多