如何将参数从 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 中的图像中获取二进制数据?