React Native使用JavaScript来实现UI,新架构使用的jsi来实现C/C++和JavaScript之间的互相调用,而jsi是使用JS引擎提供的api能力来实现的,如果看过前面TurboModule的介绍,应该对JSI有一些概念了,这一节我们会更加进一步去介绍JSI的实现,其实JSI的逻辑是很简单的,只不过因为有非常多的数据类型,所以有许多的业务逻辑。
JSI定义了一个Runtime作为接口,不同的JS引擎都需要实现这个Runtime,JavaScriptCore的实现是JSCRuntime,而Hermes的实现是HermesRuntime,HermesRuntime的源码没有放在RN里,我们只要知道这个Runtime的实现类里就是通过JS引擎提供的api来实现Runtime定义的接口功能,这里就可以解决JSI接口固定,但是底层使用不同的JS引擎的情况。
我们来看看Runtime定义的一些接口。
这里提供了大量接口,执行JavaScript代码,创建JS对象,获得或者配置JS对象的属性,数据类型的转换等等,根据不同的JS引擎提供的api来实现这些方法,然后JSI就是基于这些接口来做封装。
再来看看TurboModule是怎么实现这几个方法。
先看看get方法:
再来看看getPropertyNames,这个很简单,只要把methodMap_的所有key都收集起来返回就可以了。
TurboModule并没有实现set方法,因为这些方法不应该在JS可以修改,所以这里就没有实现。
本节介绍了jsi::Runtime的定义的一些接口,然后以TurboModule为例介绍了JSI应该如何使用,总体来说还是比较简单的,下一节我们再来看一下Fabric渲染器和Fabric组件。
到此这篇reactJS精通(react all in js)的文章就介绍到这了,更多相关内容请继续浏览下面的相关 推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/qdreactjs/14838.html