React Native原生模块
# react-native与原生三种交互模式
# RCTDeviceEventEmitter方式
public class MyEventEmitter {
private final ReactApplicationContext reactContext;
public MyEventEmitter(ReactApplicationContext reactContext) {
this.reactContext = reactContext;
}
public void sendEvent(String eventName, WritableMap eventData) {
reactContext
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, eventData);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# CallBack方式
# Promise方式
# Android
以Toast模块为例
- 创建模块
- 创建一个新的 Java 类并命名为
ToastModule.java
,放置到android/app/src/main/java/com/your-app-name/
目录下 - 这个函数用于返回一个字符串名字,这个名字在 JavaScript 端标记这个模块
- 导出一个方法给 JavaScript 使用,Java 方法需要使用注解
@ReactMethod
(React Native 的跨语言访问是异步进行的,所以想要给 JavaScript 返回一个值的唯一办法是使用回调函数或者发送事件)
- 创建一个新的 Java 类并命名为
- 注册模块
- 创建一个新的 Java 类并命名为
CustomToastPackage.java
,放置到android/app/src/main/java/com/your-app-name/
目录下 - 这个 package 需要在
MainApplication.java
文件的getPackages
方法中提供。这个文件位于你的 react-native 应用文件夹的 android 目录中。具体路径是:android/app/src/main/java/com/your-app-name/MainApplication.java
- 封装一个 JavaScript 模块,省下了每次都从NativeModules中获取对应模块的步骤。
- 创建一个新的 Java 类并命名为
- 其他特性
- 回调函数
- Promise
# ios
# npm 包分发
开发自己的react-native组件并发布到npm - 简书 (jianshu.com) (opens new window)
创建自定义组件模版项目
npx @react-native-community/bob create react-native-awesome-module
1引入
libs
包编写
Android Native Module
桥接代码(和接原生sdk一样)在
react-native-awesome-module\src\index.tsx
中编写JS代码,使用桥接代码并往外暴露发布前准备
.gitignore 和 .npmignore
在
.gitignore
中定义哪些文件不上传到github中在
.npmignore
中定义哪些文件发布时不打包如果有
.gitignore
但是没有.npmignore
文件,那么.gitignore
可以充当.npmignore
的作用package.json
文件定义了发布的所有信息,包括:组件名、版本、作者、描述、依赖等等关键信息。
组件发布
npm registry
npm adduser
npm login
发布(如果不是首次发布,需要更改版本号)
npm publish
1本地代码测试
npm i react-native-awesome-module
1编写JS代码,使用在第四步中往外暴露的方法
上次更新: 2024/08/14, 04:14:33