如何将参数从 React-Native 发送到 Native

Posted

技术标签:

【中文标题】如何将参数从 React-Native 发送到 Native【英文标题】:How to send parameter from React-Native to Native 【发布时间】:2016-05-31 11:49:30 【问题描述】:

WebView.js

// WebView.js

var PropTypes = require('ReactPropTypes')
var React = require('React')
import  requireNativeComponent  from 'react-native'

var UIWebView = React.createClass(

  propTypes: 
    url: PropTypes.string
  ,

  render () 
    return <RCTUIWebView ...this.props />
  
)

var RCTUIWebView = requireNativeComponent('RCTUIWebView', UIWebView)

module.exports = UIWebView

RCTUIWebViewManager.h

//  RCTWebViewManager.h

#ifndef RCTUIWebViewManager_h
#define RCTUIWebViewManager_h

#import <UIKit/UIKit.h>
#import "RCTViewManager.h"
#import <UIView+React.h>

@interface RCTUIWebViewManager : RCTViewManager

@end

#endif /* RCTViewManager_h */

RCTWebViewManager.m

//  RCTWebViewManager.m

#import "RCTUIWebViewManager.h"
#import "RCTUIWebView.h"

#import "RCTBridge.h"
#import "RCTEventDispatcher.h"
#import "UIView+React.h"

@implementation RCTUIWebViewManager

RCT_EXPORT_MODULE()

RCT_EXPORT_VIEW_PROPERTY(url, NSString);

- (UIView *)view


  RCTUIWebView *rctuiwebview = [[RCTUIWebView alloc] init];
  return [rctuiwebview getWebView];



@end

RCTUIWebView.h

// RCTUIWebView.h
#ifndef RCTUIWebView_h
#define RCTUIWebView_h

#import <UIKit/UIKit.h>
#import <UIView+React.h>

@class RCTUIWebView;

@interface RCTUIWebView : NSObject

@property (nonatomic, copy) NSString *url;
//@property (nonatomic, assign) NSString *uri;

- (UIWebView *) getWebView;

@end

#endif /* RCTUIWebView_h */

RCTUIWebView.m

// RCTUIWebView.m

#import <Foundation/Foundation.h>

#import "RCTUIWebView.h"

#import "RCTBridge.h"
#import "RCTEventDispatcher.h"

@implementation RCTUIWebView

NSString *URL = @"http://www.baidu.com";

- (void) setUrl:(NSString *)url 
  URL = url;


- (UIWebView *) getWebView 
  UIWebView *webview = [[UIWebView alloc] init];
  NSURLRequest *request =[NSURLRequest requestWithURL:[ NSURL URLWithString: URL]];
  [webview loadRequest:request];
  return webview;


@end

我试图用参数'url'来渲染它;

var BrowserView = require('./WebView')
<BrowserView
  style=width: 400, height: 500
  url=this.state.event.landingPage
/>

显示

"执行 UI 块时抛出异常:- [UIWebView setUrl:]: 无法识别的选择器设置为实例 0x7fcf2de1e180"

在刺激器中显示

"[错误][tid:main][RCTNavigator.m:514] 错误 使用标签 #328 设置 RCTUIWebView 的属性“url”:设置错误 带有标签 #333 的 RCTUIWebView 的属性“url”:无法调整当前 超出可用视图的栈顶"

在 Xcode 控制台中。

我不知道为什么!

如果我修改了渲染部分:

var BrowserView = require('./WebView')
<BrowserView
  style=width: 400, height: 500
  //url=this.state.event.landingPage
/>

没关系。

【问题讨论】:

【参考方案1】:

在RCTWebViewManager.m中返回RCTUIWebView的实例

//  RCTWebViewManager.m

#import "RCTUIWebViewManager.h"
#import "RCTUIWebView.h"

@implementation RCTUIWebViewManager

RCT_EXPORT_MODULE()

RCT_EXPORT_VIEW_PROPERTY(url, NSString);

- (UIView *)view


  RCTUIWebView *rctuiwebview = [[RCTUIWebView alloc] init];
  return rctuiwebview;



@end

【讨论】:

以上是关于如何将参数从 React-Native 发送到 Native的主要内容,如果未能解决你的问题,请参考以下文章

使用按钮从 IoT 设备发送信号到 react-native 应用程序蓝牙并了解服务和特性

如何将 json 参数从 Postman 发送到 Jenkins?

如何将 react-native 从 0.56.0 降级到 0.55.4 版本?

是否可以从 React-Native 中的图像中获取二进制数据?

如何将 URL 参数从 GWT 客户端发送到服务器端进行验证

如何从 C# ASP.NET 参数将希伯来语文本发送到 SQL Server?