【问题标题】:Reload Webview when onMessage callback setting stateonMessage 回调设置状态时重新加载 Webview
【发布时间】:2017-11-14 22:33:48
【问题描述】:

我正在使用 React 本机 Webview 来加载我的 Web 应用程序。我正在使用 window.postMessage 从我的网络应用程序发布消息,并且我已经实现了 onMessage 回调

render(){
   return <View>
     <Text>{this.state.messageFromWebview}</Text>
     <WebView onMessage={this.onWebViewMessage} source={{uri: webAppUri}} />
   </View>;
}

onWebViewMessage函数中,在做

onWebViewMessage=(event)=>{
   this.setState({
    messageFromWebview: event.nativeEvent.data
   })
}

以上代码进入无限循环。在设置状态时,Webview 会重新渲染并调用触发 setState 的 post 消息。

有没有其他选择,或者我在这里遗漏了什么。是否可以将 &lt;Text/&gt; 设置为来自 webview 的消息,而无需重新渲染 Webview。

【问题讨论】:

  • 有人可以看看这个吗。

标签: react-native


【解决方案1】:

我认为无限循环是因为在没有 const 请求的情况下调用事件。您需要做的就是在 setState 之前添加 const 变量。以下代码适用于我。

onWebViewMessage = (event) => {    
  // set const data
  const WishData = event.nativeEvent.data;
  // then excuting setState the constant data here
  this.setState({ 
    messageFromWebview: WishData 
  });
}

【讨论】:

  • 其实我就是按照你说的方法做的。只是为了代码清晰,我将event.nativeEvent.data 直接设置为状态。但它仍然无法正常工作
  • 完成您的 Webview 属性,InjectedJavaScript 需要更多变量才能成功加载,即 ref={webview => { wv = webview; }} onLoadEnd={this._onLoadEnd.bind(this)} javaScriptEnabled={true} 并在导出默认类之前添加类似 let wv = null;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 2020-08-31
  • 1970-01-01
  • 2020-08-27
  • 2016-08-11
  • 2018-06-07
相关资源
最近更新 更多