react本机
一次学习,随处书写。
这是真正的原生应用程序,因此它们通常比非原生应用程序具有更好的性能。要构建 React Native 应用程序,您仍然需要了解目标平台(Android/iOS)并且仍然需要为每个平台编写一个应用程序,但是您可以在两个平台上使用相同的应用程序架构(React/Flux)。
由于它是用 JS 编写的(如 React),您仍然可以在平台之间共享代码,但有些代码必须始终不同,因为您在render
函数中使用的 ReactElement实际上是特定于平台的。所以基本上你可以共享你所有的状态管理逻辑,但你必须为你的目标平台提供自定义渲染功能。
如果您需要良好的/本机性能,您有时间学习 iOS 和 Android 平台并同时维护 2 个不同的应用程序,这是一个不错的选择。
目前 React Native for Android 还没有发布,但可能会在 2015 年 8 月发布。它是常规原生应用的一个很好的替代品,并提供了一些优势,比如热重载,但它仍然不是一个非常成熟的技术,有点风险,但是从长远来看非常有前途,并且经过 Facebook 和社区的实战测试。
你也可以看看ComponentKit,同样来自 Facebook,它在某种程度上是 ObjectiveC 的 React,但我认为大多数新的 Facebook 项目将倾向于使用 React Native 而不是 ComponentKit。
Cordova / WebView 应用程序
一次编写,随处运行
Cordova/Phonegap 应用程序不是本机应用程序。它们是围绕 WebView 应用程序的本机外壳。webview 是在本机应用程序中运行的浏览器。这些应用程序打包在本机外壳中,以便像其他本机应用程序一样提供给 Google/Apple 应用程序商店。
优点是它只是 HTML、JS 和 CSS。这意味着,如果您已经拥有一个移动网站(或同时处理桌面和移动屏幕的响应式桌面网站),您可以轻松地将其打包为 Cordova 应用程序并通过应用程序商店提供。
因此,您编写一次移动网站,您还可以免费获得一个 iOS 和 Android 应用程序!
如果您只是想要仍然非常可接受的性能,您希望您的应用程序尽快在大多数平台上可用,并且您没有时间/资源来并行开发多个应用程序,那么这是一个不错的选择。
如果您已经了解 Web 开发,它也会有所帮助 :) 而且您仍然可以通过 Cordova 插件轻松使用本机应用程序功能(如相机)。
AngularJS (Ionic, Famo.us) vs ReactJS (Reapp, TouchstoneJS)
Ionic 和 Famo.us 是主要用于 AngularJS 之上的移动框架
Reapp 和 TouchstoneJS 是 ReactJS 之上的移动框架
这些不是为原生(或 React Native)应用程序制作的,而是为移动网站或 webview 应用程序制作的。选择你想要的,我不知道有什么特别的。使用框架不是移动/webview 应用程序的要求,但您可能需要一些实用程序来处理触摸事件,因为该onclick
事件通常不足以获得良好的移动体验。
我不会去争论 AngularJs 和 ReactJs,但是两者都经历过并且更喜欢 ReactJS(而且我并不孤单)。ReactJS,如果以正确的方式使用,会更实用、更优雅、更容易理解。我不认为 AngularJs 允许优雅的热重载和时间旅行 ala Bret Victor因为它需要ReactJS 支持的不同架构。
然而 AngularJS 仍然允许构建东西,而且 Famo.us/Ionic 可能比现有的 ReactJS 移动框架更成熟。
后端
我建议您使用 NodeJS,因为它允许您构建同构/通用应用程序,这意味着您可以在客户端/服务器上共享代码,包括 React 组件,以便您可以在客户端和服务器上进行渲染。这意味着您可以直接提供内容而不是空的 html 页面,以便更快地提供内容,更容易为搜索引擎编制索引,并且它也适用于禁用 js 的浏览器。
这很奇怪,因为我什至不喜欢 Javascript(我喜欢像 Scala、Haskell 或 Clojure 这样的语言)。如果是这种情况,您仍然可以探索同构应用程序的其他选项,例如:
- 您的大部分后端都使用 X 语言(或微服务?),还有一些用于服务器端渲染的 NodeJS 服务。
- 使用类似 Nashorn 的东西在 JVM 中运行 JS
- 使用可编译为 Javascript(如 ScalaJS)并可在客户端/服务器上运行的后端语言。
然而,最后 2 个选项仍然有点不成熟。
我的经验
我们是一家小型初创公司(3 名开发人员),没有人拥有任何 iOS/Android 原生体验,并希望快速获得结果。
我们最初有一个复杂的桌面 ReactJS 网站(SPA)。我们使用 CSS 媒体查询使其响应。我们添加了自定义触摸事件处理程序以获得更好的移动体验。所以最后我们有一个网站,可以很好地支持移动/平板电脑/桌面。
我们采用了这个完全相同的应用程序并将其打包在 Cordova 中,因此现在它也可以在应用程序商店中使用。它工作得很好,性能非常好。您可以期待与您的移动网站/cordova 应用程序相同的性能(对于 Android,请查看Crosswalk 项目)
我们最终得到了一个 HTML/JS/CSS ReactJS 响应式 SPA 来维护(仍然努力工作那些 SPA!)。
我肯定会再次做出相同的选择,即使将来如果我们的团队成长,我们可能会使用 React Native。
2016 年编辑:至于现在,如果我要选择使用什么,我将使用 Redux,并将 ReactJS 用于桌面和移动网站,而 ReactNative 用于移动本机。Redux 非常好,即使并非所有代码都可以在移动应用程序之间共享,但 Facebook 报告说,大部分代码都可以轻松实现。请注意,将表示组件和容器组件明确分开非常重要,这样您就可以在所有应用程序中重用容器组件,并且只提供自定义的表示组件。
另请注意,可以在 react native 应用程序中添加 webview,因此可以逐步将移动 web 应用程序迁移到本机应用程序(例如,可以先尝试迁移导航菜单和总体布局)。编辑:同样有趣的是,Ace项目旨在在 Cordova 应用程序中添加一些本机布局。
2017 年编辑:对于所有移动应用程序开发人员,绝对推荐尝试 Expo (React Native)。您无需了解有关本机应用程序的任何信息,即可获得 Cordova 的开发人员速度。如果您已经对 React 有所了解,则可以在 1 分钟内开始使用。
也推荐使用 GraphQL 和 Apollo,虽然学习时间会比较长,但是对于长期的项目维护来说是非常好的选择。