EmberJS React vs Ember by Alex Matchneer at EmberNYC meetup

ericguo · 2015年10月31日 · 最后由 Cryrivers 回复于 2016年11月25日 · 11573 次阅读
本帖已被管理员设置为精华贴

React 11/1在上海会有一个workshop,看到 Ember.js 节点最近没啥人气,本着凑热闹的精神,准备去看一下 React,预习了点暴走的 React 介绍视频,还有霹雳渔的,感觉 React 上手好容易的样子(天哪,这贴其实我是准备黑 React 的啊。。),心有所动,于是就又放狗搜了下这两对冤家的近况。

最终发现Alex MatchneerReact vs Ember 的比较真心不错,终于又将 Ember 的道心稳住了。。

其实同时懂 React 和 Ember 的人很少,能够客观看的就更少了,还能顺便黑 Rails的,就。。

React 的问题:

Ember 的问题:

  • 入门不易
  • 框架有点大
1 楼 已删除

我觉得 ember 现在最大的问题就是还不是 routable component,所以现在写起 ember 来很是不爽。不知道 ember 什么时候才能把这个 feature 加上。我现在快从 ember 粉转黑了。最近用了一下 vue.js,发现非常好用啊,写起来十分爽快,推荐 vue.js。

#2 楼 @aidewoode 同意,你的这篇vue.js 使用感受写的不错。

Ember 的文档有些跟不上更新了,最佳实践捣鼓半天

@nong 没用过这货,我觉得没有必要纠结选什么框架吧,选合适的就好,这也要看你项目的需求,还有你使用起来到底舒不舒服。反正得记住,是你在用框架,不是框架来玩你,如果你在用一个框架的时候有这种感觉了,就趁早换一个吧,前端框架何其多,何必为难自己呢?

#8 楼 @nightire

看了这个 ppt. 帖子里有一点感觉很好,作者很认真的探究了 react 的优势,而且也会考虑将真正吸引人的地方引入到 ember, https://docs.google.com/presentation/d/1afMLTCpRxhJpurQ97VBHCZkLbR1TEsRnd3yyxuSQ5YY/edit#slide=id.g380053cce_1495, 感觉这种态度很让人放心,更加有信心。

已倾向于 ember.js,

@nightire 很喜欢你这种认真回答的风格,每篇都可以单独成为一篇精华帖。

我可以补充一份打鸡血的讨论吗?虽然时间比较早 (2014.2), 但里面的讨论着实很精彩呀!

[Discussion] The future of Ghost's admin UI

然后是一段时间的实现 [Ember.js] admin UI rewrite

成功的案例,挖一挖总是有的。

#11 楼 @wppurking 两个框架都有优秀的地方,react-native毕竟 FB 也是敢想敢干啊,都学吧。。

看到 @nightire 的回复后,就把这篇帖子投精华了。

@lgn21st 现在成为精华贴有两条出路

  • 自己写精华贴
  • 发一个让@nightire回复的话题贴

新技能 get 😄

React 和 Ember 放在一起比较,很奇怪。React 并不是一个完整的 MVC 框架,只是相当于 view,而与 React 配合的 Flux,自称只是个模式,也不是框架,用来和 React 配合。 我倒希望看到那种适用性推荐的帖子,比如说某种情况适合 React,某种情况适合 Ember,某种情况更适合 Angular。 React 比较吸引我的是它还有个 React native。 非常希望@nightire能出一篇这样的科普贴。

#5 楼 @fate 确实,我上次也搞了好久,都要 😢

不能拿 Ember Data 和 Redux 比吧,感觉现在用 Redux 写写轻量的应用还是不错的。谁来谈谈 GraphQL 和 Relay 啊?

ember 之前丑陋的模版是实作的时候的大坑,导致之前一直对 ember 不感冒。

react 最近两个月跟的比较紧,可以大致说一下我所知道的:

关于 View engine 的理解

的确大部分人的理解是 react 就是 View engine,不过从使用的角度来说

  1. state props 取代了 model data 存储的作用。
  2. high order component,包含了部分的 controller 到 view 的逻辑,例子有:Replay.Container,redux-react.Provider 剩下的就是 flux 补全的 action 部分,用来改变 data。 所以理解为单纯的 View engine,感觉上有点怪怪的。

子状态共享以及 data store

子状态的共享在 redux 里面可以采用监听 action 来存储数据到自己的 store 里面,这个不是非常别扭。但是的确如果整个页面就是一个大的 react component 会方便很多。

在 dataStore 方面 redux 的实现方式并不能和 ember 相比。store 在 redux 里面是非常非常简单的,也没有和后端通信的接口,需要自己去拼接。但是很显然,redux 并不是 react 官方配合的数据层解决方案,react 官方吸收了 reducer 到 react component 里面,作为 state 到 render 的中间数据处理层。而 Relay 则是 facebook 官方配合 GraphQL 的前端实现,整体上就是一个前端的超级 DB。

通用方法的向下传递。

手工传递 props 到 sub sub sub component 下面是比较累人的,react 目前提供了context的方式传递,但是 context 本身不作为 component 是否 re-render 的依据,需要的话只能自己写。

关于 RFC

react 的确没有自己的 RFC,不过标准性的东西有一些: react-future

关于 jsx 和模版

模板和 component 之间是区分还是合并,还是取决于团队分工的。如果设计师不懂 js,需要前端插一道手,那 jsx 和模版就没有太多区别。而使用 js 原生语法,并且能直接采用 js 自己定义的内容,那么 jsx 就比模版更好一点。

但是如果需要设计师去动,且设计师懂得 html 不懂 js,那当然还是模板好一点。

@nightire

咨询下,使用 ember 为客户端 app 的话,ruby 系的话,用来做 api,哪个比较合适呢?我目前只用过 rails + grape, 就是不管 view

另外实际上 rails 使用量依旧很大,考虑在 rails 的 view 上增加组件支持的话,也就是尽量去改善 rails 的 view 的写法,你觉着 polymer, react, ember 等这些哪个更好呢?

#20 楼 @seaify rails-api ActiveModel::Serializers 这套方法 不喜欢把前后端逻辑混在一起

#19 楼 @iwege

View Engine 的说法是 React 自己强调的,在历届 React Conf 里都反复的被强调。你提到的那几点:

  1. state props 取代不了 model data,因为它们传递/保存的是 value,而不是 model
  2. high order component 这里你举的例子都是 React 生态圈里的,但 React 本身就只是 View Engine 并没什么改变

所以没必要觉得怪怪的吧,当然内行相互谈话说起 React 一般都是隐式的指代 React 及其生态圈相关,所以我们当然知道 data store 该怎么搞,知道怎么把 flux/redux/relay 这一系列串到一起,只不过这么一来其实和 Angular/Ember 等等也是半斤八两的,并不总是人们以为的那么轻量

诚然,你可以说这样更灵活,选择更多,每一个独立的组件其质量都更有保障等等等等,然而无非就是另外一种选择罢了。就好像 JSX 到底好不好,最终只不过就是一种选择而已。

综上,尽管 Ember 没有 React/Angular 等等那么引人注目,但我这些年大家都用下来的感觉是,Ember 没有那么那么不好,其他的也没有那么那么好,现在对待它们的心态很平和,不管用哪个都能用到和用对它们的优势和特色,这才是最重要的吧。

#20 楼 @seaify 为了增加组件化的支持,Polymer 算是首选吧,虽然我觉得它还不足够成熟。Vue.js 什么的也不错啊,React 的生态圈越来越广越来越深了,如果只拿来当一个组件化工具觉得有点大材小用的感觉。Ember 不推荐,这是一个做 SPA 的框架,不适合用来局部增强,不过 Ember 也在轻量化改造,半年以后再看未必就是现在这个样子。

#22 楼 @nightire 貌似我通篇没有说过 react 的灵活是其优点,也没说过其轻量级。另外我说的是 model 的 data 存储部分,不是说替代 model。

灵活是它的一把双刃剑,不管是 flux,redux 还是 relay 使用起来都有点不顺畅或者不好驾驭的感觉,作为一个开发者,个人比较喜欢类似 laravel 和 rails 这样一揽子解决方案,而不是东拼西凑打补丁,为难选择性综合症患者的东西。

#24 楼 @iwege "你可以说 xxx”……这是一种行文手法而已,类似于英文里的 "You can say...",这里的“你”或者“You“都不是特指你,而是一种泛指。所以我说的并不是你……

关于 model,部分取代也不行,不是说你把数据接收到了然后可以在每一个组件的 local 使用,那么这个数据就是 model 或者部分是 model 了。仔细对比一下 Ember 接受数据也是靠 components 的 attrs,也是通过 yield 来做像 React 提供的 context 这样的事情,但这些都和 model 无关。Ember data 才是和 model 有关的部分,而这部分在 React 里是没有的,需要其他组件加入来支持,所以说 React 是 View Engine 或者 Components Layer 一点没错。

Alex Matchneer 真是不多见的天才,他的 ember-concurrency 好用得要死

需要 登录 后方可回复, 如果你还没有账号请 注册新账号