无法读取未定义的 React Native 的 属性 '#<WebView>'
Cannot read property '#<WebView>' of undefined react native
我在 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;
当我按下后退按钮时出现错误 "Cannot read property '#' of undefined react native"
每个:
ref={(c) => {this.myWebView = c} }
以下内容:
this.refs[myWebView].goBack();
应该be:this.myWebView.goBack();
这里我得到了这个问题的解决方案。
我刚刚使用了 this.myWebView.goBack(); 并且有效。
所以,当我们使用钩子时,可能在 React 0.61 中,我们在函数组件中,我们应该这样使用它。
我在 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;
当我按下后退按钮时出现错误 "Cannot read property '#' of undefined react native"
每个: ref={(c) => {this.myWebView = c} }
以下内容: this.refs[myWebView].goBack();
应该be:this.myWebView.goBack();
这里我得到了这个问题的解决方案。
我刚刚使用了 this.myWebView.goBack(); 并且有效。 所以,当我们使用钩子时,可能在 React 0.61 中,我们在函数组件中,我们应该这样使用它。