Scalajs-react VS Xored Scalajs-react VS SRI

时间:2015-10-14 12:41:11

标签: scala.js scalajs-react

这些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原生,但没有URL路由器支持,也没有DOM DSL。 Facade API看起来非常精简,与编写Javascript React.js代码非常相似。但它是相当新的,可能没有准备好生产?
  4. 如果我错了,请纠正我,因为这里有太多选项可供选择,并希望有一种方法可以在Scala.js中编写React.js代码。

3 个答案:

答案 0 :(得分:18)

截至2015年10月:

  • 我还得出结论,xored/scala-js-react目前尚未积极开发。用于模板化的方法是将XML语法保持为JSX,我喜欢在某些方面,特别是因为它使代码看起来更像普通的React。 更新:@MxFr指向fork并进行了一些活动。
  • 毫无疑问,japgolly/scalajs-react正处于积极发展之中。对React 0.14的支持即将到来。方法是使用lihaoyi/scalatags的自定义版本来进行模板化而不是XML语法。这样做的缺点是一开始使代码看起来有点怪异,但你已经习惯了它,它提供了良好的类型安全性。
  • chandu0101/sri是新手,希望成为更多跨平台解决方案(网络,Android,iOS)。关于使discussion使用chandu0101/sri的问题有japgolly/scalajs-react,而且sri的作者似乎对基于该对话的内容特别感兴趣。

基于以上所述,目前最具吸引力的解决方案是japgolly/scalajs-react,请记住,这个领域的情况会很快发生变化。

答案 1 :(得分:16)

我是scalajs的作者 - 反应所以我对其他两个库的评论将不那么明确,希望没有错,但我们走了。

  • scalajs-react - 目标是提供最佳的Scala体验和类型安全性。附带许多Scala好东西,性能工具,支持FP,镜头等(都是可选的。)专注于网络反应。

  • xored - 目标让我看起来尽可能接近Scala中的JSX。

  • Sri - 目标让我想要覆盖最多的JS(即使是Relay)并且尽可能接近JS。

当然还有其他细节,(评论上面提到的scalajs - 使用React.createClass做出反应而不是扩展React.Component,但这是一个简单的实现细节,可以在10分钟内更改在不破坏Scala向后兼容性的情况下 - 我不会担心这一点,但我相信项目级哲学应该是您的决定性因素而不是细节。如果你想毫不费力地接近JS,请使用Sri;如果您希望将类型安全性和Scala体验作为优先事项,请使用scalajs-react。

此外,scalajs-react会将其核心模块拆分为核心和dom以匹配React。除非社区中的某个人发生这种情况,否则我不会对添加的本机模块屏住呼吸。另一方面,斯里兰卡做网络&本土已经和我知道@chandu(斯里兰卡的一位作者)长期以来一直在玩土着人,所以它应该得到很多支持和改进斯里兰卡的生命。

  

我个人觉得这个库可能只是React.js代码的一个非常简单的外观,这样可以更容易地更新到更新的版本React.js

是的,但简单的外观并不是我想要的。我想要一个我可以信任的外观,我的代码将始终有效 - 许多事情可以绊倒React,随着时间的推移,所有这些精细打印规则和运行时问题都嵌入到外观类型中,以便scalac可以留意我们。

(由于困难,跳过升级到React 0.13的决定也没有.scalajs-react在发布后的几天内获得了React 0.14支持(目前在scalajs-react v0.10-RC1上)。 )

  

不是一个简单的外观意味着将产生更多的Javascript代码,以及浏览器必须下载的更多代码。

是的,是的,但我们可能只在这里讨论几KB。使用Scala.JS可以增加150KB +,而且它的优化器非常擅长排除你不能使用的代码。

希望有所帮助!选择是件好事。

答案 2 :(得分:11)

使用Sri,你可以开发网络和移动应用程序,因为scalajs-react / Xored Scalajs-react是以网络为中心的。我从未使用过Xored Scalajs-react,因此无法对此发表评论。现在问题是Sri-web vs scalajs-react

Sri-web vs Scalajs-React

对于任何scala react web应用程序,我们需要3个核心原则1)定义React组件/元素的方法2)一些内置组件/原语/构建块3)路由器

1)定义React组件/元素

Scalajs-react有精心设计的API ReactComponentB,但它基于旧的React.createClass,Sri有基于新的React ES6类React.Component的ElementFactory。 In general React.Component is faster than React.createClass,从反应0.14开始,我更喜欢在React.createClass上使用React.Component,除非你非常需要mixin' s。据说我们在共同项目中将ReactComponentB和ElementFactory结合起来discussing

2)基本构建块/原语:

Scalajs-react附带dom-dsl(你有完整的dom元素/属性可供选择)。 Sri还带有dom dsl和react-native-web组件。

3)路由器:

Scalajs-react有基于url的路由器。 Sri拥有UniversalRouter,可以在移动设备和网络上运行,但它不支持网址和基于URL的WebRouter。

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

最后希望我们很快就会有一个共同的核心项目(1),以便用户可以根据他们的味蕾选择/切换渲染器,在一天结束时scala.js应该赢了:)

编辑:顺便说一下,我是斯里兰卡的作者:)

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

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