有人可以解释原生作用的反应吗?
找到了很多关于入门,组件使用,导出模块的好文章..但是,
关于本机如何反应的谷歌搜索并没有真正帮助,但本文http://tadeuzagallo.com/blog/react-native-bridge解释了如何导出本机模块以及当javascript调用它们时会发生什么.
..我仍然觉得很难理解(作为一个javascript开发)这样的事情,如何首先渲染发生在屏幕上,这3个线程的功能是什么以及它们如何相互通信,这个javascript事件循环是什么,为什么我们是否需要批量调用以及如何批量调用等...
有人可以在javascript开发人员视角分享文章/解释吗?
谢谢!
我将尝试描述 React Native 是如何工作的。这有点复杂。
首先我想推荐这个 URL 来了解 React Native 的基础内部机制:
阅读:https ://www.reactnative.guide/3-react-native-internals/3.1-react-native-internals.html
所以你正在用 JS/JSX (JavaScript) 或 TS/TSX (TypeScript) 编写代码,但 Android 主要使用 Java(为了这个答案,我们现在知道它是 Kotlin),iOS 使用 Swift/Objective-C 那么 java 脚本如何代码正在 Java 虚拟机或 Dalvik 虚拟机或任何 iOS 使用中运行。
所以这里是如何在Android机器(iOS机器)中运行JavaScript代码的问题,
1)使用WebView,但WebView速度很慢,WebView中发生了很多事情,Android/IOS机器为您完成了很多繁重的工作,以便在您的应用程序中运行网页。页面加载缓慢,滚动抖动等等。这就是 Cordova 和 PhoneGap 应用程序运行不佳的原因。
2)我们不需要WebView,我们需要轻量级的JavaScript编译器(解释器),它只能编译一组JS指令,而不是全部。一个仅针对核心 JavaScript 并读取新定义的 XML/ReactNative 标签的程序。React-Native 标签(Image、FlatList、Text 等)在 JS 端转换,并转换为 JS 方法调用,而不是在 Android/IOS 端。
阅读: https: //reactjs.org/docs/react-without-jsx.html JSX 首先转换为 JS。
3)这里,JavaScript虚拟机发挥了作用,它与JVM或DVM完全不同。并且可以运行在JVM或DVM上。
React Native 使用:JavaScriptCore
阅读: https: //www.raywenderlich.com/1227-javascriptcore-tutorial-for-ios-getting-started(适用于 IOS)
这是一个开源供您查看
https://github.com/LiquidPlayer/LiquidCore:这甚至包含文件系统,react-native 不包含。
注意:同样的想法 FB 用于 NodeJs = 后端 JavaScript。
4)JS-Bundle:现在你可以在你的应用程序中运行JS代码,但是你如何发送它。您将创建一个文件,即将所有文件和库文件合并为一个文件,并将其命名为 JS-Bundle。
适用于 Android 的简单命令
node node_modules/react-native/local-cli/cli.js bundle --entry-file index.js --platform android --bundle-output ../jsbundle/index.android.jsbundle --assets-dest ../jsbundle/res
Run Code Online (Sandbox Code Playgroud)
5)JS-Bridge:顾名思义,提供了JavaScript和Native-Code(Android Java)之间通信的桥接方法和组件。它们如何使用 JSON 进行通信,就像 React-Native 中的其他内容一样。JSON 命令以本机代码发送到 UiManager,以在异步线程上创建 UI,异步线程将这些命令添加到 MessageQueue 中并处理它们。
阅读:https://hackernoon.com/understanding-react-native-bridge-concept-e9526066ddb8
另请阅读: https: //tadeuzagallo.com/blog/react-native-bridge/
6)主题:
因此,从 JS 角度来看,您编写的 JS 代码将在轻量级浏览器(即 ReactView)上运行。
阅读:https://www.codementor.io/@saketkumar95/how-react-native-works-mhjo4k6f3
| 归档时间: |
|
| 查看次数: |
4493 次 |
| 最近记录: |