Android
創建原生模塊包
public class MyNativePackage implements ReactPackage { @Override public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) { } @Override public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) { }}
在 createNativeModules 方法中添加原生模塊
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) { List<NativeModule> modules = new ArrayList<>(); modules.add(new MyNativeModule(reactContext)); return modules;}
在 createViewManagers 方法中添加原生 UI 組件
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) { List<ViewManager> components = new ArrayList<>(); components.add(new RNNativeComponent()); return components;}
創建原生模塊
先通過繼承 ReactContextBaseJavaModule 創建 MyNativeModule 類。
public class MyNativeModule extends ReactContextBaseJavaModule { public MyNativeModule(ReactApplicationContext reactContext) { super(reactContext); }}
為了讓 React Native 在 NativeModules 中找到我們的模塊,我們還需要覆蓋 getName 方法。
@Overridepublic String getName() { return "MyNativeModule";}
現在我們已經擁有一個可以導入到 JavaScript 代碼的原生模塊,現在可以向其中加入功能。
暴露模塊方法:定義一個接受設置參數、成功回調和失敗回調的 Show 方法。
public class MyNativeModule extends ReactContextBaseJavaModule { @ReactMethod public void Show(ReadableMap config, Callback successCallback, Callback cancelCallback) { Activity currentActivity = getCurrentActivity(); if (currentActivity == null) { cancelCallback.invoke("Activity doesn't exist"); return; } }}
在 JavaScript 中調用模塊方法
import { NativeModules } from 'react-native'const { MyNativeModule } = NativeModulesMyNativeModule.Show( {}, //Config Parameters () => {}, //Success Callback () => {} //Cancel Callback)
注意:
模塊方法只提供靜態引用,不包含于 react 樹中。
創建原生 UI 組件
如果你需要在 react 樹中渲染一個原聲 UI 組件
創建一個繼承 ReactNative ViewGroupManager 的 Java 類
public class RNNativeComponent extends ViewGroupManager<ViewGroup> { public static final String REACT_CLASS = "RNNativeComponent";}
覆蓋 getName 方法:
@Overridepublic String getName() { return REACT_CLASS;}
覆蓋 createViewInstance 方法,返回你的自定義原生組件
@Override protected FrameLayout createViewInstance(final ThemedReactContext reactContext) { return //用 FrameLayout 包裹的自定義原生組件 }
創建原生 prop 方法
@ReactProp(name = "prop_name") public void setPropName(NativeComponent nativeComponent, propDataType prop) { }
JavaScript 中使用
import { requireNativeComponent } from "react-native"const MyNativeComponent = requireNativeComponent("RNNativeComponent", RNNativeComponent, { nativeOnly: { }})<MyNativeComponent prop={this.props.prop}>
iOS
Macro
RCT_EXPORT_METHOD(funcName:(NSString *)onlyString secondName:(NSInteger)argInteger) { ... }
上面的例子暴露到 JavaScript 是 NativeModules.ModuleName.funcName
創建原生模塊包
我們需要在項目中添加兩個文件:頭文件和源文件。
- MyNativePackage.h#import "RCTBridgeModule.h"@interface MyNativePackage : NSObject <RCTBridgeModule>@end- MyNativePackage.m#import "MyNativePackage.h"@implementation MyNativePackageRCT_EXPORT_MODULE();@end
創建模塊方法
RCT_EXPORT_METHOD(Show:(RCTResponseSenderBlock)callback) {}
JavaScript 中引入模塊方法
import { NativeModules } from 'react-native'const MyNativeModule = NativeModules.MyNativeModuleMyNativeModule.Show(() => {})
創建原生 View 組件
創建 view 方法,返回你的原聲組件
- (UIView *)view { //Initialize & return your native component view}
創建原生 prop 方法
RCT_CUSTOM_VIEW_PROPERTY(prop, DATA_TYPE_OF_PROP, YOUR_NATIVE_COMPONENT_CLASS) {}
在 JavaScript 中使用
import { requireNativeComponent } from "react-native"const MyNativeComponent = requireNativeComponent("RNNativeComponent", RNNativeComponent, { nativeOnly: { }})<MyNativeComponent prop={this.props.prop}>
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答