Scalajs-react VS Xored Scalajs-react VS SRI

Scalajs-react VS Xored Scalajs-react VS SRI

这些 Scala.js React.js 库之间有什么区别,我为什么要选择一个而不是另一个?

  1. Xored Scalajs-react - 上次提交是 8 个月前。所以我猜开发不再活跃了。
  2. Scalajs-react - 非常活跃且非常完整,并带有自定义 URL 路由器。但是 API 似乎偏离了实际 Javascript React 代码的编写方式,并且不支持 React-native 并且添加 Scalaz 和 Monocle 会增加库的大小浏览器必须下载的 Javascript 个。该文件说 Scalaz 和 Monocle 是选择加入的,所以我猜默认情况下 Scalaz 和 Monocle 被排除在外?我个人觉得这个库可能只是 React.js 代码的一个非常简单的外观,这将使更新到更新版本 React.js 变得更容易,而不是一个简单的外观意味着更多 Javascript 将生成的代码以及浏览器必须下载的更多代码。我这里可能是错的,请指正?
  3. SRI - 新手,门面看起来非常完整,支持 Web、Relay 和 React native,但没有 URL 路由器支持,也没有 DOM DSL。门面 APIs 看起来非常精简,非常类似于编写 Javascript React.js 代码。但它相当新,可能还没有准备好生产?

如果我错了请纠正我,因为这里有太多选项可供选择,希望有一种方法可以在 Scala.js 中编写 React.js 代码。

截至 2015 年 10 月:

  • 我还得出 xored/scala-js-react is not actively developed at the moment. The approach used for templating is to keep an XML syntax a la JSX, which I do like in some ways, in particular because it makes the code look more like plain React. UPDATE: @MxFr pointed to a fork 加上一点点 activity。
  • 毫无疑问,作为 japgolly/scalajs-react is under active development. Support for React 0.14 is coming. The approach is to use a custom version of lihaoyi/scalatags 用于模板而不是 XML 语法。这样做的缺点是一开始代码看起来有点怪异,但您会习惯它,并且它提供了良好的类型安全级别。
  • chandu0101/sri is new and wants to be more of a cross-platform solution (web, Android, iOS). There is a discussion about making chandu0101/sri use japgolly/scalajs-react,根据那次谈话,sri 的作者似乎对这样做特别感兴趣。

基于以上所述,目前最有吸引力的解决方案是 japgolly/scalajs-react,请记住,space 中的情况变化很快。

使用 Sri,您可以同时开发 Web 和移动应用程序,因为 scalajs-react/Xored Scalajs-react 是 Web centric.I 从未使用过 Xored Scalajs-react 所以无法评论 that.Now 问题是 Sri-web 还是 scalajs-react

Sri-web 与 Scalajs-React

对于任何 Scala React Web 应用程序,我们需要 3 个核心原则 1) 定义 React 的方法 components/elements 2) 一些内置的 components/primitives/building 块 3) 路由器

1) 定义 React components/elements :

Scalajs-react 设计得很好 API ReactComponentB 但它是基于旧的 React.createClass ,Sri 有基于新的 React ES6 的 ElementFactory class React.Component . In general React.Component is faster than React.createClass, as of react 0.14 i prefer to use React.Component over React.createClass unless u badly need mixin's. That being said we're discussing 关于在共同项目中组合 ReactComponentB 和 ElementFactory。

2)基本建筑blocks/primitives:

Scalajs-react 附带 dom-dsl(您有完整的 dom elements/attributes 可供选择)。 Sri 还带有 dom dsl 和 react-native-web 组件。

3) 路由器:

Scalajs-react 具有基于 url 的路由器。 Sri 有 UniversalRouter,它可以在移动设备和网络上使用,但它不支持 urls,以及基于 URL 的 WebRouter。

Ofc scalajs-react 有很多其他的助手和很酷的 FP stuff.If 如果有人不同意我的观点,请随时开始讨论我很高兴知道新事物 :)

最后希望我们很快就会有一个共同的核心项目 (1),这样用户就可以 choose/switch 根据他们的口味进行渲染,最终 scala.js 应该会赢 :)

编辑: 顺便说一句,我是 Sri 的作者 :)

Edit2: 更新了路由器部分,因为 sri 0.4.0 有一个基于 url 的网络路由器。

Edit3: 更新了构建块部分,因为 sri 0.6.0 现在有 dom dsl。

我是 scalajs-react 的作者,所以我对其他两个库的评论会少得多,希望没有错,但我们开始吧。

  • scalajs-react - 目标是提供最好的 Scala 体验和类型安全。附带许多 Scala 好东西、性能实用程序、对 FP 的支持、镜头等(都是可选的。)重点是 Web 的 React。

  • xored - 在我看来,目标是尽可能接近 Scala 中的 JSX。

  • Sri - 在我看来,目标是覆盖大部分 JS 领域(甚至 Relay)并尽可能接近 JS。

当然还有其他细节,(评论上面提到的 scalajs-react 使用 React.createClass 而不是扩展 React.Component 但这是一个微不足道的实现细节,可以在 10在不破坏 Scala 向后兼容性的情况下分钟 - 我不会担心那个),但我相信 项目级理念应该是你的决定因素 而不是细节.如果你想不费吹灰之力地接近JS,就用Sri;如果您希望类型安全和 Scala 体验优先,请使用 scalajs-react。

此外,scalajs-react 会将其核心模块拆分为 core 和 dom 以匹配 React。除非社区中的某个人让它发生,否则我不会对添加本机模块抱有希望。另一方面,Sri 已经在做 web 和 native,我知道@chandu(Sri 的作者之一)长期以来一直在研究 native,所以它应该在 Sri 的生命周期中得到很多支持和改进。

I personally feel that this library could just be a very simple facade to the React.js code which would have made it easier to update to newer version React.js

是的,但简单的外观不是我想要的。我想要一个我可以相信我的代码将始终有效的外观 - 许多事情都会使 React 出错,随着时间的推移,所有这些细则和运行时问题都会嵌入到外观类型中,以便 scalac 可以关注我们。

(此外,跳过升级到 React 0.13 的决定并不是因为困难。scalajs-react 在发布后的几天内获得了 React 0.14 支持(目前在 scalajs-react v0.10-RC1 上).)

not being a simple facade means more Javascript code that will get generated and more code the browser will have to download.

是的,确实如此,但我们在这里可能只谈论几 KB。完全使用 Scala.JS 会增加 150KB+,而且它的优化器非常擅长排除您不使用的代码。

希望对您有所帮助!有选择是好事