尝试停止在 react-native 中加载 webView 时出现未定义错误
Undefined error when trying to stop webView loading in react-native
在浏览了这里的 react-native 文档和各种答案后,我可以看到:
this.refs[WEBVIEW_REF].stopLoading();
用于阻止webView继续加载。
我试过了,但总是得到:
undefined is not an object (evaluating 'this.refs[WEBVIEW_REF]')
我的代码如下,我试图阻止应用程序加载帮助页面并在浏览器中启动,而不是在应用程序中启动。
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
View,
WebView,
Linking,
} from 'react-native';
const HEADER = '#3b5998';
const BGWASH = 'white';
const WEBVIEW_REF = 'webview';
const DEFAULT_URL = 'https://somesite.com/';
export default class reactNativeApp extends Component {
state = {
url: DEFAULT_URL,
scalesPageToFit: true,
};
_onShouldStartLoadWithRequest(e) {
if (e.url.indexOf('assistenza') >= 0) {
Linking.openURL(e.url);
return false
}
return true
}
_onNavigationStateChange(e) {
if (e.url.indexOf('assistenza') >= 0) {
this.refs[WEBVIEW_REF].stopLoading();
Linking.openURL(e.url);
return false
}
return true
}
render() {
return (
<View>
<WebView
ref={WEBVIEW_REF}
automaticallyAdjustContentInsets={false}
style={styles.webView}
source={{uri: this.state.url}}
javaScriptEnabled={true}
domStorageEnabled={true}
decelerationRate="normal"
startInLoadingState={true}
scalesPageToFit={this.state.scalesPageToFit}
onShouldStartLoadWithRequest={this._onShouldStartLoadWithRequest}
onNavigationStateChange={this._onNavigationStateChange}
/>
</View>
);
}
}
AppRegistry.registerComponent('reactNativeApp', () => reactNativeApp);
想知道这是为什么吗?我见过的每个例子都使用它:/
您需要使用以下任一方式绑定函数:
constructor (props) {
super(props)
this._onNavigationStateChange = this._onNavigationStateChange.bind(this)
}
或在render
中:
onNavigationStateChange={this._onNavigationStateChange.bind(this)}
在浏览了这里的 react-native 文档和各种答案后,我可以看到:
this.refs[WEBVIEW_REF].stopLoading();
用于阻止webView继续加载。
我试过了,但总是得到:
undefined is not an object (evaluating 'this.refs[WEBVIEW_REF]')
我的代码如下,我试图阻止应用程序加载帮助页面并在浏览器中启动,而不是在应用程序中启动。
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
View,
WebView,
Linking,
} from 'react-native';
const HEADER = '#3b5998';
const BGWASH = 'white';
const WEBVIEW_REF = 'webview';
const DEFAULT_URL = 'https://somesite.com/';
export default class reactNativeApp extends Component {
state = {
url: DEFAULT_URL,
scalesPageToFit: true,
};
_onShouldStartLoadWithRequest(e) {
if (e.url.indexOf('assistenza') >= 0) {
Linking.openURL(e.url);
return false
}
return true
}
_onNavigationStateChange(e) {
if (e.url.indexOf('assistenza') >= 0) {
this.refs[WEBVIEW_REF].stopLoading();
Linking.openURL(e.url);
return false
}
return true
}
render() {
return (
<View>
<WebView
ref={WEBVIEW_REF}
automaticallyAdjustContentInsets={false}
style={styles.webView}
source={{uri: this.state.url}}
javaScriptEnabled={true}
domStorageEnabled={true}
decelerationRate="normal"
startInLoadingState={true}
scalesPageToFit={this.state.scalesPageToFit}
onShouldStartLoadWithRequest={this._onShouldStartLoadWithRequest}
onNavigationStateChange={this._onNavigationStateChange}
/>
</View>
);
}
}
AppRegistry.registerComponent('reactNativeApp', () => reactNativeApp);
想知道这是为什么吗?我见过的每个例子都使用它:/
您需要使用以下任一方式绑定函数:
constructor (props) {
super(props)
this._onNavigationStateChange = this._onNavigationStateChange.bind(this)
}
或在render
中:
onNavigationStateChange={this._onNavigationStateChange.bind(this)}