这些Scala.js React.js库之间的区别是什么?我为什么要选择其中一个?
如果我错了,请纠正我,因为这里有太多选项可供选择,并希望有一种方法可以在Scala.js中编写React.js代码。
答案 0 :(得分:18)
截至2015年10月:
基于以上所述,目前最具吸引力的解决方案是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
对于任何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。