我爱编程RN类似

思维导图-React Native通信原理

2018-04-16  本文已影响268人  潇潇潇潇潇潇潇
React Native通信原理.png

原理

原生端和JS端都保存了一份模块配置表,里面标记了所有原生暴露的模块和方法。

JS调用原生模块方法时,通过模块配置表把请求分解为模块ID、方法ID和参数传给原生,原生通过模块配置表找到对应的方法并执行

React Native结构

286D5081-903E-4564-9A5F-109189CD9C64.png

React Native启动流程

39649440-586D-481D-9708-90CD5FBBE88A.png

创建RCTBridge

创建RCTBatchBridge

执行[RCTBatchedBridge loadSource]

执行[RCTBatchedBridge initModulesWithDispatchGroup]

执行[RCTJSCExecutor injectJSONText]

执行完JS代码,回调OC,调用OC中的组件

实现过程

原生向js端发消息

原生端生成模块配置表

21AA6845-CB76-442C-B703-8BC6AC093E6B.png 6C216003-4F3E-4AB6-8C69-1D213AC3D81D.png
    - moduleClassesByID数组表,存储原生类的class

    - moduleDataByID数组表,保存由原生类生成的RCTModuleData对象

    - moduleDataByName字典表,以+methodName方法的返回值为key,保存由原生类生成的RCTModuleData对象

    - RCTModuleData保存类moduleClass、name、methods、instance、confige

模块配置表传到js端

AC697F9A-E79F-4E5A-B713-46EC7B119C4E.png

js端调用原生模块

91A3C0C8-81B0-40C2-A8B8-28B5B6D11A6C.png E405E7D2-A805-4655-A3F1-E7A1CF5FFDD7.png E7246B93-F454-46DB-ACD6-7A8573C3EF89.png
- 间隔5毫秒后才能调用
CC0F2791-86CA-40BC-9E94-180C0842E2A4.png B316460A-4E05-4E7D-8B8D-D15DC668770C.png
    - 
43D08E94-E58D-4E7E-B661-ED0E33326F13.png
- 原生方法执行完毕,再主动调用js,js端通过callbackId,找到对应callback调用

js调用原生UI组件

63E57B57-ACE6-40C9-8E71-1E13FD53A442.png
    - 把reactTag放到RCTUIManager的_viewRegistry字典中,key为reactTag

- 通知js开始绘制页面

    - 
C4D37E32-FBE8-41C0-9ABB-5269A69E94F3.png AA735048-5774-4495-A1C3-C0EA3BD177D2.png

参考资料:
http://blog.cnbang.net/tech/2698/
http://taobaofed.org/blog/2015/12/30/the-communication-scheme-of-react-native-in-ios/
http://awhisper.github.io/2016/07/02/ReactNative%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%902/

上一篇 下一篇

猜你喜欢

热点阅读