2025年reactJS精通(react all in js)

reactJS精通(react all in js)svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。



 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> 

讯享网

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组件。

小讯
上一篇 2025-05-01 10:03
下一篇 2025-05-16 16:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/179086.html