V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shenqi
V2EX  ›  程序员

关于前端对 ng , vue , react 的选择

  •  
  •   shenqi ·
    shenqihui · 2018-04-13 09:58:48 +08:00 · 11017 次点击
    这是一个创建于 2177 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近收到一堆初中级的前端简历,无一例外,三大框架都说去了解或者使用过。

    这中间,很大的比例都是使用过 vue 为主,其次是 ng,比较少就是 react。我个人倾向于 react 为主。

    这么大的一个趋势到底是怎么造成的?
    第 1 条附言  ·  2018-04-15 10:49:44 +08:00
    三大框架的选择,没想到能引起这么大的风波。

    我倾向于 react,原因是在已有框架下,react 能做到逻辑清晰。语法随意写不混乱。

    目前工作,每天都会维护或者开发不同项目,穿梭于三大框架中(因为前期是不同的人创建的项目),有时候会比较混乱,触发渲染各种会突然混了。

    ————

    看了那么多人的回复,总的来说,主题里问到的问题,为什么前端入门选手大多选择 vue 开始三大框架的学习,主要原因是 hello world 简单,方便上手,同时职位需求也往这方面靠拢。
    第 2 条附言  ·  2018-04-15 11:00:43 +08:00
    另外我在回复提到 vue 箭头函数问题,不是讨论写多一个箭头和对象属性定义,而且 this 的指向问题。我曾经问过面试者在定义组件的时候,事件、方法、普通 this 方法,为啥用不了箭头函数,我猜测 vue 文档没讲解出为啥。(我的答案是工厂模式相关操作,没看过 vue 源码,只是猜测)
    92 条回复    2018-05-17 11:22:27 +08:00
    zzl
        1
    zzl  
       2018-04-13 10:05:37 +08:00
    vue 上手容易啊
    Akkariin
        2
    Akkariin  
       2018-04-13 10:05:58 +08:00
    vue 简单易上手中文文档好,ng 算是 vue 的全家桶版全面了解需要时间,react 嘛 fb 自己作死。。
    natforum
        3
    natforum  
       2018-04-13 10:06:46 +08:00
    vue 懒人专用,个人比较倾向 react
    liuzhaowei55
        4
    liuzhaowei55  
       2018-04-13 10:08:51 +08:00   ❤️ 2
    先说结论:vue 有中文文档,vue-cli 脚手架好用,没有上手难度。react 对于我个人有一定的上手难度。
    我做后台开发偶尔会写一点前端的页面,ng 火的时候接触过,但那个时候前端页面写的不是很多,没有过多的了解,之后有需要的时候,就接触到了 vue,期间也了解到了 react,但是 vue 的中文文档,vue-cli 脚手架,还有 html,js,css 三个用标签分开同时写到一个文件里的这种方式,让我从传统的 html 过渡过来,真的是毫无压力,上手也很快。
    再之后开始了解 react 是因为 react-native,还有 ant-design 整体来说 react 对于我来说上手难度比 vue 高了很多,现在主要使用的也还是 vue。
    shenqi
        5
    shenqi  
    OP
       2018-04-13 10:09:24 +08:00
    个人非常不习惯 VUE 的写法,组件定义时候箭头函数的指向完全乱套。
    jyootai
        6
    jyootai  
       2018-04-13 10:13:53 +08:00
    @Akkariin 此话怎讲?
    murmur
        7
    murmur  
       2018-04-13 10:16:00 +08:00   ❤️ 2
    @shenqi 那你应该去跟 ES 委员会说 为什么偏偏 ES6 的箭头表达式不按之前 this 的套路走
    Akkariin
        8
    Akkariin  
       2018-04-13 10:17:55 +08:00
    @jyootai react 吗?之前不是改过开源协议吗,之后好多公司都转了,除此之外就是 mvvm 看上去比较 cool。
    brickyang
        9
    brickyang  
       2018-04-13 10:20:28 +08:00 via iPhone
    是不是还看到了一大批 Vue 的仿站项目?
    KuroNekoFan
        10
    KuroNekoFan  
       2018-04-13 10:26:07 +08:00   ❤️ 4
    国内 vue 比较流行,是事实
    react 更优秀,也是事实
    murmur
        11
    murmur  
       2018-04-13 10:27:59 +08:00
    @KuroNekoFan react 不是更优秀在于他做的太少了 很多东西都要使用者自己来
    vue 提供了官方的全家桶 帮你在模板里做了 if for 这种超常用标签的封装
    我可不认为 if 和 for 都要自己用语法糖的框架多优秀
    jsx 给我的感觉就是你有一个超强的计算器可以算矩阵可以算微积分但是 1+1 都要自己用积分来实现
    xrlin
        12
    xrlin  
       2018-04-13 10:32:28 +08:00
    作为后端,我喜欢 angular
    sunzhenyucn
        13
    sunzhenyucn  
       2018-04-13 10:36:46 +08:00
    作为后端开发
    TypeScript 以及 Angular 的 DI 使我感觉到倍感亲切
    notedown
        14
    notedown  
       2018-04-13 10:37:40 +08:00
    @murmur jsx + es6 没必要做常规标签的封装了 list.filter((item)=> item.type === 1).map((item)=> <div>{item.name}</div>)
    用 vue 纯粹是为了移动端压缩小. react 做移动端不太好.如果只会 vue.我想他应该不怎么写 es6 尖头等新 es 新特性
    KuroNekoFan
        15
    KuroNekoFan  
       2018-04-13 10:38:58 +08:00   ❤️ 2
    @murmur 关于 vue 里一些指令,syntax 的问题,我也跟挺多人交流过,觉得这玩意儿真的是提升了学习成本和犯错几率。单纯的 react 用起来真的是很简单很纯粹,比 vue 清晰
    murmur
        16
    murmur  
       2018-04-13 10:45:41 +08:00   ❤️ 7
    vue、react、angular3 个都用过的写两句
    首先 react 不得不说洋人的信仰就是足,按以前把 html 和 js 混写到一起的在哪里都会被打死,现在你居然可以明目张胆在 js 里大段写 jsx 还被赞美,然后作为一个 mvvm 框架,vm 层多重要不言而喻,这是给用户的门面,然而一个 vm 层连 if 和 for 都要自己用语法糖实现(尤其是企业应用稍微复杂的业务没 if 和 for 会死人的),最终写出来的东西简直一个丑陋。react 给我的感觉就是开发者各个很 geek,还喜欢搭配 rxjs 这种东西,然而都 2018 年了,即便是你只要用到 promise,不用 async 这种语法糖,配合超强的 IDE 也不会让开发特别难受,如果你的业务非得一堆时序 ajax 不合并,我建议你去把后端先打死。换句话说,一个项目好坏绝大多数跟你管理有关,而不在乎你的语法糖多么炫酷,你的函数式编程多么牛逼。
    然而 react 生态就是牛逼,配合 react native

    vue 的感觉就是给人用的,如果 react 是给 geek 用的,框架设计处处透露着以人为本的气息。为什么 react 要设计出不可变对象这个概念,很大一部分原因是他的 setState 有些弱智没法检测 Array 或者 Object 内部的改动,然而 vue 大多数改动是可以检测出来的,所以 vue 在优化上也会比 react 省心多。而且你拿到 vue 之后,稍微用脚手架配一下构建部分,会发现这东西跟你以前写过的东西没区别,html 对应 template,js 对应 script,模块天然分段,表现是表现脚本是脚本,组织严谨可读性强。而且,vue 帮你准备了你以前用过的所有东西,我说的就是事件,虽然说事件相比于 state 管理不太好调试,但是通过合理的参数和命名是可以避免这个问题的,而且事件这东西太 tm 灵活了。
    vue 的问题就是缺少移动端和 native 的适配,weex 我用算信了你的邪。

    ng1 在当年局限于 ie8 没有 es5 特性被迫弄出的性能问题,然而 ng2 从底层到语法大改伤了很多人的心,ng2 虽然后面提供了去掉 compiler 的编译模式,让他的 helloworld 能和 vue 和 react 有一拼,然而当年的配置依然过于繁琐,以至于 ng 虽然很优秀但是输在了起跑线。如果是企业开发,或者是 java 程序员,应该会很容易接受 ng 那套概念,即便是 ng1。
    fe619742721
        17
    fe619742721  
       2018-04-13 10:51:07 +08:00   ❤️ 1
    行吧,你在这里问三大框架,vue 永远是被踩的那个,毕竟会的人太多了就瞧不上啦
    不过我司一样用 vue 用的挺开心的,会 vue 的前端好招,面试的时候稍微把把关,机灵点的初级前端招进来教几天就能写了,开发规范约定好,大型项目一样在跑
    learnshare
        18
    learnshare  
       2018-04-13 10:51:51 +08:00
    Vue 更倾向于在国内流行,React 偏国际化,Angular 位居第三
    bucky
        19
    bucky  
       2018-04-13 10:56:55 +08:00
    有些人工作多少年也分不清程序对技术的信仰和公司对技术的需求之间的区别,打工的永远也不会明白做老板的,这就是思维的局限吧
    grewer
        20
    grewer  
       2018-04-13 11:08:21 +08:00
    @shenqi Vue 里函数比箭头函数更简洁吧
    react:
    ```
    foo = (bar)=>{
    console.log(bar)
    }
    ```
    vue:
    ```
    foo(bar){
    console.log(bar)
    }
    ```
    谁更简洁不是一目了然?
    luoway
        21
    luoway  
       2018-04-13 11:10:04 +08:00   ❤️ 1
    Vue 因为好上手,前后端开发人员都容易使用。
    React 光是 JSX 就对 JS 能力要求不低,不会 ES6 的话写起来就很恶心了。

    而大多数后端还在用 jQuery 写些简单、通过复制粘贴来实现重复的逻辑时,框架选型阶段无疑 Vue 会胜出。
    这么个大趋势是无数一个人当多个人用的创业公司、前赴后继的从业人员造成的。
    szdubinbin
        22
    szdubinbin  
       2018-04-13 11:22:50 +08:00   ❤️ 2
    这种问题简直日经,知乎能给你从计算机起源撕到实现共产主义,那么撕完了优越感有了,你的需求呢 /滑稽
    Pastsong
        23
    Pastsong  
       2018-04-13 11:31:46 +08:00 via Android
    用过 react native 之后越来越觉得 react 是个很牛逼的 UI 库(做技术没有信仰和咸鱼有什么区别
    xieguanglei
        24
    xieguanglei  
       2018-04-13 11:35:19 +08:00 via iPhone   ❤️ 1
    React 大法好,理念先进,又足够简单,扩展性很强。用上了 React 简直是海阔凭鱼跃,天高任鸟飞,JS 全在你手中的感觉。

    Vue 因为临时参与其他团队的一些其项目也用过,上手还是挺快的,但是感觉约定太多,尤其是 template 里面的很多语法,有点欣赏不来。
    xiaxiaokang
        25
    xiaxiaokang  
       2018-04-13 11:36:59 +08:00
    vue 和 ng 几乎是一个体系(语法),react 主要我觉得和他们都不太两个区别大有点孤立的感觉
    还有 vue 上手非常快属于“渐进式”库,非常适合短期上线项目。ng 属于完整框架,而且 ng 默认采用 ts 类型开发,大项目优势就非常明细! react 我倒是没怎么接触,希望有高手向我解释下优势
    xiaxiaokang
        26
    xiaxiaokang  
       2018-04-13 11:40:42 +08:00
    @xieguanglei template 语法你看 ng 就可以了,很多雷同
    murmur
        27
    murmur  
       2018-04-13 11:43:27 +08:00
    @xiaxiaokang react 的优势就是 react native
    其余的还真不叫优势
    如果所谓的语法糖也是优势的话
    will0404
        28
    will0404  
       2018-04-13 12:01:57 +08:00   ❤️ 14
    看了楼上的回复我想说,技术可以有偏向性但不应该贬低任何一个技术,然而几个框架甚至都不应该分门别类,同属 js 开发。
    看到有人说出 Vue 中组件定义时箭头函数 this 指向乱套,我就知道,这人 js 基础都没过关,this 指向和你用什么框架有什么关系吗。
    下面说我的理解。
    React 比较学院派,引入了函数式编程的概念,纯函数,不可变对象,高阶函数等等,函数式的理论其实在计算机领域存在很长时间了,有一点非主流但其实是非常有用的概念。前端大多人都是半路出家,认为这些偏门或太 geek 本质是自己理论基础不扎实,因为 js 本身就师从 FP 系,没法面向对象(别扭的原型链不算),如果你希望自己是一名合格的工程师而你觉得 React 很难,那你应该多看书,提高自己,恕我直言,因为你暂时还不算合格的工程师。
    Vue 让传统前端觉得简单是因为它很好的保留了前端三大件 html,css,js 的书写分离(即使是在单文件组件中),传统前端过渡到 Vue 非常自然和容易,这是 Vue 的优势,加上文档非常友好,开发者是中国人等因素,能火起来绝不是偶然。Vue 的技术特点是指令的运用(师从 ng1 ),双向绑定等(本质是对象属性的读写操作劫持和 dom 事件监听),在中后台开发中用双向绑定非常舒服,如果你用 react 和 vue 分别写过 form 组件你就会明白,所以我也很喜欢 Vue。而 Vue 的其它思想如组件化,状态管理,单向数据流等,和 React 大同小异,可以这么说,目前很多 React 和 Vue 的大型项目脱离了 view 层就是一模一样的东西。
    Angular 就非常专业和刻板,灵活性不高,然而你需要的东西它都有,我接触到的后端开发都更喜欢 Angular,他们大多是写 Java 的,对 Typescript 带来的类型系统非常喜欢,用他们的原话说,“没有类型的动态语言写起来就像摸石头过河”,我写了一年 TS 后对此也表示非常理解,利用友好的 Lint 和编译期检查可以规避相当多的低级 Bug。这里可以看出 Angular 是志在打造包含了完整生态的一个解决方案,这一点和 React 和 Vue 利用社区力量扩展周边很不同,在 Angular 里,不管你需要什么,都能找到官方的支持。语法层面呢,无非是看你对 ts 和模块化编程的熟悉程度。至于 rxjs,如果你明白它解决了什么问题你就不会觉得它是个问题,说白了,就是异步的数据流处理,以前你用 Promise,用 async await,给你包装了一层你就不会了吗,高大上的“响应试编程”是什么?不就是你每天都在写的发布订阅模式,node.onclick = xxx。

    回过头来说,前端工程师啊,还是应该先把语言基础学扎实,一切框架之争既浮躁又没意义:)
    Pastsong
        29
    Pastsong  
       2018-04-13 12:14:48 +08:00 via Android   ❤️ 1
    @Pastsong react 在写 react native 优势不止是能写,而是它让用 react 写一个和 dom 完全不相关的界面竟然是如此 make sense 的事情
    ChefIsAwesome
        30
    ChefIsAwesome  
       2018-04-13 12:18:18 +08:00   ❤️ 3
    vue 跟 angular 就不该拿来跟 react 比。这俩应该跟 polymer,knockout 等等各种存在了很久的带模板功能的 mvvm 库比。
    oswuhan
        31
    oswuhan  
       2018-04-13 12:31:18 +08:00
    本人同倾向于 react。

    vue 的技术特性、发展方向比较迎合(非前端、伪前端)开发者以及前端初学者的口味。

    就如同 jquery 的设计理念比较类似,API 很全很强大,上手无须复杂的理论基础。

    jquery 发展到现在已经完全变了味,所谓的 jq 开发基本上都是围绕“搜索并集成 jq 插件”来进行。

    很显然,vue 也走上了 jq 的老路。
    murmur
        32
    murmur  
       2018-04-13 12:34:34 +08:00   ❤️ 2
    @oswuhan jquery 这框架地位不容置疑
    来看我分析一波
    jquery 中文翻译成杰阔睿
    杰:杰出,代表 jquery 在前端历史的地位,jquery 即便死去也将永远的刻在里程碑上
    阔:宽阔,取海纳百川之意,这里主要指 jquery 丰富的插件体系以及 jquery 和各主流框架的包容性
    睿:睿智,jquery 从 api 设计到命名无不体验着一种睿智,相比于某 mvvm 框架 api 长到一行写不下而言

    所以 jquery 咋了么 jquery 不是框架胜似框架 是有他的道理的
    gladuo
        33
    gladuo  
       2018-04-13 12:39:47 +08:00
    @murmur 服气 hhh
    lolizeppelin
        34
    lolizeppelin  
       2018-04-13 12:50:26 +08:00 via Android
    作为一个写 Python 后端的运维 以前从来不写 js css
    前段时间被迫写后台 UI
    花一天时间粗看 w3c 然后就直接撸 react 的表示 jsx 很好 不用折腾 html 和 css 真是好

    vue 容易过度的优势对非前端开发来说反而是绊脚石

    我选 react 的最大原因就是 react 不用写 css 和 html
    还有一个重要原因是 Google 的那个 me 什么 UI 的框架有 react 版
    0 js html 基础的情况下 练习一个礼拜不到 上模板网买个 react 加 mxxx ui 的模板网就能直接出活了
    murmur
        35
    murmur  
       2018-04-13 12:52:56 +08:00
    @lolizeppelin 不写 css 怕不是在梦里
    哪里说你选 react 就不需要写 css 和 html 了
    只能说 jsx 方式写 html 更恶心人了
    lolizeppelin
        36
    lolizeppelin  
       2018-04-13 13:00:02 +08:00 via Android
    @murmur
    你觉得恶心是因为你习惯了原生 html
    实际上 HTML 也不就是类似 xml 的东西而已
    jsx 的写法我就觉得没问题


    至于 css 起码不用写 css 文件。。虽然还是要看文档学样式
    meszyouh
        37
    meszyouh  
       2018-04-13 13:07:20 +08:00
    我的个人感受,Vue 写多了 js 都写不好了,还是喜欢 React。
    gesneriana
        38
    gesneriana  
       2018-04-13 13:09:08 +08:00
    vue 模版语法没有 react 纯 js 写起来那么灵活。 刚上手感觉 template 写起来很爽,逻辑复杂了真的就是绊脚石了。
    不说哪个好哪个不好,能脱颖而出的都是好框架,看个人和团队习惯。
    lambdaxs
        39
    lambdaxs  
       2018-04-13 13:09:45 +08:00
    @murmur 一开始也是无法接受 jsx,喜欢纯粹的 html,但是写多了发现 js 融合 html 也有一定的道理,能让表达更加灵活。
    auroraccc
        40
    auroraccc  
       2018-04-13 13:11:35 +08:00
    @grewer react 也可以写成 vue 这种啊
    luoway
        41
    luoway  
       2018-04-13 13:12:50 +08:00
    @meszyouh 确实,vue 写多了变懒了

    @lambdaxs ES6 字符串模版了解下
    React
        42
    React  
       2018-04-13 13:13:49 +08:00
    我比较喜欢 React
    tinytin
        43
    tinytin  
       2018-04-13 13:14:03 +08:00
    肯定是 react。
    jlkm2010
        44
    jlkm2010  
       2018-04-13 13:24:34 +08:00
    @learnshare hi,国际上使用率 react > ng > vue,国内 react >= vue > ng
    wangyufeng
        45
    wangyufeng  
       2018-04-13 13:25:18 +08:00
    哎。2018 我还用 jq,你们讨论的东西我都看不懂了。。。
    grewer
        46
    grewer  
       2018-04-13 13:34:15 +08:00
    @auroraccc 他说了是用箭头符号
    overflowHidden
        47
    overflowHidden  
       2018-04-13 13:43:21 +08:00
    这种知乎上都被讨论烂了的话题怎么还在讨论。。。顺便吐槽下我不喜欢 jsx 的原因是很多半吊子写出来的 jsx 可读性简直是灾难
    ahonn
        48
    ahonn  
       2018-04-13 14:10:30 +08:00
    @murmur #16 你对 React 可能有些误解,不可变对象并不是 React 设计的,React 本身思想也是函数式的那一套。换成 ClojureScript 之类的本身数据就是不可变的就没有这一回事了。

    另外中 JSX 中不能用 if 跟 for,但是可以使用三目运算以及 map 好吧。所以“连 if 和 for 都要自己用语法糖实现”根本不需要好吧。至于为什么不能用 if 跟 for,因为 JSX 会转成方法调用,如果 JavaScript 能够这样写 const xxx = a if b else c 的话,JSX 中当然能够使用 if 了,然而这并没有必要。
    murmur
        49
    murmur  
       2018-04-13 14:26:33 +08:00
    @ahonn 有没有必要是使用者说了算 但是不做就是另外一回事了
    vue 做了那么多人用说明还是有必要的
    甚至 npm 上还有 if 的标签
    顺便 vue 一样有 jsx 支持 既然 jsx 是 babel 搞出来的一种语法糖 那么有 render 方法的 vue 一样可以用
    ben1024
        50
    ben1024  
       2018-04-13 14:30:13 +08:00
    推荐 React
    ahonn
        51
    ahonn  
       2018-04-13 14:44:57 +08:00
    @murmur #49 能不能用 if 貌似跟 vue 多不多人用没有关系吧?假如 Vue 没有 v-if 或者 JSX 中使用 if,用三目你也能用得很开心的吧。

    React 与 Vue 的实现不同,所以我不认为能不能用 if 或者 for 能说明谁优谁劣。况且 Vue 的 JSX 也不能用 for 吧?
    至于说 React 是给 geek 用的,是否任何自己不喜欢或者不认同的技术都是可以说是给 geek 用的呢。Vue 当然也是很不错的,但是真的要分个高低是不合理的。对于 React 的评价我觉得你是不客观的。
    barbery
        52
    barbery  
       2018-04-13 14:49:13 +08:00
    作为一个后端,比较喜欢写 angular。。。也写过一段时间的 react native 和 weex,react native 完胜垃圾 weex
    nikolai
        53
    nikolai  
       2018-04-13 14:50:35 +08:00
    入坑了 React,我觉得 JSX 挺好
    doubleflower
        54
    doubleflower  
       2018-04-13 14:53:35 +08:00
    用 react 做大点项目会用 redux 吧,react 本身是很纯粹很简单,但是和 redux 一搞真是狗屎啊,还不如 vue 了
    murmur
        55
    murmur  
       2018-04-13 14:55:25 +08:00
    @ahonn if 和 for 只是 vue 人性化的一小部分而已 vue 的 template 支持 for 就可以啊
    即便如此 就因为 if 和 for 以及在 class 上使用了原先 html 的名字而不是非得叫 className
    整个 vue 的模板写起来比纯 jsx 要整洁一大截
    优劣不一定是性能 不一定是功能 上手难度 对开发者友好度一样可以作为标准之一
    你既然整个 jsx 都是语法糖转义 为啥不顺手把 if 和 for 这么超常用的标签也做个支持呢 对吧 你已经把 class 改成 className 了
    如果说 jsx 灵活就说明 jsx 更好 那是不是做的越少的框架就越好?

    我们桌面端是 react 移动端 vue 两部分我写的东西都不少 我还真做不到更客观了
    neoblackcap
        56
    neoblackcap  
       2018-04-13 15:09:00 +08:00
    @murmur jquery 其实很多概念已经要纳入浏览器实现了,因此它不是框架,它更胜框架才对。
    ahonn
        57
    ahonn  
       2018-04-13 15:13:22 +08:00
    @murmur #55
    纯 JSX 写起来整洁不整洁看人,我只能这样说。

    以 Vue 中的 v-if 去对标 React JSX 中没有 if,我实在是看不出客观。
    如果你理解 JSX 最后会变成什么的话,你就不会说 JSX 居然没有 if 跟 for 了。即使在 Vue 的 JSX 中也是没有 v-if 的,Vue 的 JSX 中 if 的用法与使用三目运算符完全没有区别吧?拿 Vue 的 template 跟 JSX 去比,这两者的实现完全是不同的,没有可比性,何来客观?

    如果 Vue 在 JSX 中也支持 v-if,那就另说。

    还有一点,React 中使用不可变对象是为了在 shouldComponentUpdate() 中方便高效的判断,也符合 React 本身函数式的思想。没有搞清楚就说 “为什么 react 要设计出不可变对象这个概念,很大一部分原因是他的 setState 有些弱智没法检测 Array 或者 Object 内部的改动”,何来客观?
    murmur
        58
    murmur  
       2018-04-13 15:28:28 +08:00
    @ahonn
    ( 1 )拿 Vue 的 template 跟 JSX 去比,这两者的实现完全是不同的,没有可比性,何来客观?
    vue 在脱离 compiler 的情况下一样是把 template 直接解析成 render 函数里的嵌套调用实现的 为什么叫没有可比性
    compiler 和 babel 不能比较么
    更何况无论是 map 还是三目都会导致 html 和函数混写,如果你非要说这也叫整洁那我只能说你 6,三目这种没法对齐的东西还会坑死强迫症


    ( 2 )是不是要 update 这个还是需要用户自己优化,当然优化到极致是要每次 shouldComponentUpdate 都要考虑的,然而根据不可变对象的思路,你即便是改动了 object 里的一个属性,也会导致整个 object 变化,到最后还是要 vdom 进行 diff,而 vue 直接在属性上挂了 setter 可以直接检测是那个属性发生了变动,当然如果属性绑定比较奇葩最后也会落到 vdom diff 这一步,但是的却 setter 要比直接裸比 dom 更好一点点(现在已经没人拿 ie8 说事了吧)

    极致下 react 的每个 shouldUpdate 进行人工比较是性能会做到极致,但是既然选了 mvvm 就放弃了一些性能吧,比起 jquery 年代用 template 拼接的传统的 batch insert 近乎完美的高效来说

    你也可以说你们公司最低端的机器是 iphone7 不会考虑 batch insert 那点开销
    zhwithsweet
        59
    zhwithsweet  
       2018-04-13 15:32:05 +08:00
    vue 和 react 简化开发难度,提高开发效率,让大量的“小白”也能做出之前的前端开发要憋好久才能做出来的东西,一些不思上进的程序员害怕这些框架,害怕被时代进步干掉。前端开发现在处在一个高速发展的阶段,不进则退,老前端引以为傲的 css 兼容,js 兼容,被一个一个工具和框架用最佳实践搞定了。前端去年开始回归平淡,浪潮开始退了,公司要求高了,技术水平上去了,那些裸泳的也一一出现了。总结一句话,现在流行 3 大框架都是上品,只是有大量的不够水准的程序员而已,我们要做一手抓基础,一手抓前沿,keep hungry,学到老,从小白变成大白。
    zhwithsweet
        60
    zhwithsweet  
       2018-04-13 15:36:39 +08:00
    @learnshare angular 才是真正意义的框架,react 和 vue 本身只是 mvc 和 mvvm 类库而已,react,vue+生态才能赶上 angular。
    leisure
        61
    leisure  
       2018-04-13 15:39:32 +08:00
    react 这种 js 跟 html 混写的方式我作为一个切图仔演化成的前端是很不想接受的,没有别的,就是觉得不干净...
    seeker
        62
    seeker  
       2018-04-13 15:40:34 +08:00
    大家不要小瞧了“简单易上手”,这个威力是很大的,想想 jquery。想想从 c 和 go,c++ 和 java。
    zhwithsweet
        63
    zhwithsweet  
       2018-04-13 15:48:31 +08:00
    @murmur 复杂组件 vue 同样可以 render+ jsx 来实现,配合 vue-class-component + babel-plugin-transform-vue-jsx 在体验上和 react 已经区别不大了。当然这种情况不是很多。
    Pastsong
        64
    Pastsong  
       2018-04-13 16:10:43 +08:00
    @leisure react 原旨教派的开发模式里 html 和 css 都是不干净的,只有 js 是最干净的,JSX 是 react 引入的唯一语法糖,v-* ng-* 等 DSL 只会脱离平台增加学习成本
    rcteya76084
        65
    rcteya76084  
       2018-04-13 16:37:52 +08:00
    就说一句,angular 和 react 可以用来写小程序么,vue 可是有 mpvue 至少在端上来说,vue 的覆盖比另外两个好很多
    wangxiaoaer
        66
    wangxiaoaer  
       2018-04-13 16:38:08 +08:00
    曾经尝试过 reactjs,但是真的写起来碰到 if for 等逻辑处理的时候简直想死,因为唯一的办法就是提取成变量。这就导致顺序往下写 markup 的时候,一旦卡壳就要返回上面,新建一个变量,再回来。首先是写起来不方便,再就是看起来更不直观(和 vue 那种相比)

    ng1 当初很快上手,性能问题其实还好。
    ng2 简直头大,不说别的,三个框架里面谁的启动代码比他多??

    Vue 的 html css js 合并一个文件是我的最爱,但是 mobx+react 是我的向往。所以我选择 go die
    gouflv
        67
    gouflv  
       2018-04-13 17:14:54 +08:00
    搞清楚想要什么再来选型,从使用场景出发才不会太主观
    比如 react 适合高度封装复用,vue 适合快速开发,ng 差不多介于两者之间
    WenJimmy
        68
    WenJimmy  
       2018-04-13 17:23:53 +08:00   ❤️ 1
    vue 也可以用 jsx 啊
    jin5354
        69
    jin5354  
       2018-04-13 17:47:09 +08:00   ❤️ 1
    思想越简单的东西,越可靠,越稳定。
    vue 中的 watch 和 computed 简单用用特别方便,当你开发大型实时应用时你会发现是毒药,带来的时序问题几乎要重构才能解决。
    JamesRuan
        70
    JamesRuan  
       2018-04-13 17:48:06 +08:00
    React 牛逼之处根本不是啥 JSX,而是 HOC。JSX 只是语法糖而已,帮你快速写 VirtualDOM 而已,根本不是在写什么 HTML,也没有什么魔法;相对地,vue 和 ng 用 HTML 插入特定标签的方式更像是一种 hack,更像是在玩弄技巧。

    把组件平铺开来,是个框架都能做好。把组件嵌套使用,甚至用高阶组件动态生成组建,让 React 的表达力提高了很多,复杂的功能可以抽象成更简单易懂的方式。
    murmur
        71
    murmur  
       2018-04-13 17:49:05 +08:00
    @jin5354 computed 跟 data 的绑定本质上差不多 最终都是要靠 vdom diff 刷新的 怎么会有时序问题
    难道你还在 computed 和 watch 里放 setTimeout 么
    shunia
        72
    shunia  
       2018-04-13 17:53:20 +08:00
    明明是 react 最简单吧,因为他的核心实现逻辑最简单啊.
    blessyou
        73
    blessyou  
       2018-04-13 17:55:34 +08:00
    我写 react 玩过一段时间,工作用的是 Vue。感觉就是....代码像不像 shi 和框架没关系,看人。
    BGLL
        74
    BGLL  
       2018-04-13 18:02:59 +08:00
    认为原型链不是面向对象的....
    原型链是面向对象的 5 种主流实现( Actor-based、Class-based、Concurrent、Prototype-based、By separation of concerns )方法之一好吧
    oop99
        75
    oop99  
       2018-04-13 18:03:41 +08:00
    react 更激进些. 用 react/Vue 应该都不算选型错误.
    jiangnanyanyu
        76
    jiangnanyanyu  
       2018-04-13 18:54:23 +08:00 via Android
    入坑 react
    duan602728596
        77
    duan602728596  
       2018-04-13 18:54:36 +08:00 via iPhone
    html,css,javascript 好好学习,好好研究,哪来那么多挑三拣四
    j
        78
    j  
       2018-04-13 19:30:53 +08:00
    从[穷 b 私企小老板][穷 b 空手套白狼风格产品经理]的角度,这一页具有决定性的说明力,其他免谈
    https://github.com/RuMengkai/awesome-vue#Demo%E7%A4%BA%E4%BE%8B
    adspe
        79
    adspe  
       2018-04-13 19:46:34 +08:00
    前几日招进来一个会 Vue 的写 React,结果代码根本没法看,变量名都用 abc,不会做的功能一律说有 bug 不能做,每次都给他擦屁股
    luoway
        80
    luoway  
       2018-04-13 19:54:47 +08:00
    @j 这个都半年没维护了,vuejs Star 和 React 都过了 9w,只差 3k 了
    luoway
        81
    luoway  
       2018-04-13 19:56:06 +08:00
    @adspe 这个和 Vue、React 都没关系,开发经验少了
    xiaoxiuaoliang
        82
    xiaoxiuaoliang  
       2018-04-13 20:02:49 +08:00
    没错,vue 就是比 react 简单易于理解。解释同一件事情,用一句话说清楚和用十句话才说清楚,哪个更让你认可?
    adspe
        83
    adspe  
       2018-04-13 20:10:20 +08:00
    @luoway 我和他经验都一样
    murmur
        84
    murmur  
       2018-04-13 21:28:25 +08:00
    @JamesRuan 高阶组件这个让我想起了以前用 jquery ui 的时候 dialog 继承 window 继承 panel 的玩法,结果是大家都用 dialog 但是你得去看 panel 的文档这么反人类

    前端这个东西太具体了,不像 spring 那种包罗万象的框架需要一大堆设计模式来保证他能正确执行还要让懵懂的不太喜欢看文档的程序员也能正确把东西整合进去,样式的改动也可以通过 css 而不是设计模式来完成

    我需要一部车,我希望他可以设置 air-condition=cool 或者是 hot 或者是不要空调的时候 off 就可以,alarm=true,而不是希望你用所谓的高阶组件去改我的空气循环系统,改我的顶棚,更不需要你弄一个 factory 为我动态生产拖拉机和小汽车
    j
        85
    j  
       2018-04-13 22:28:08 +08:00   ❤️ 1
    @luoway 你没有 get 到重点,是 awesome vue 那个页面里有大量可以参考的中文项目。
    相比起来 https://github.com/Pines-Cheng/awesome-react-cn 就太差了。
    mmm159357456
        86
    mmm159357456  
       2018-04-13 22:40:39 +08:00
    看来大家都对 ng 有偏见啊
    jxl
        87
    jxl  
       2018-04-14 07:14:49 +08:00
    react 只是个 js 库而已 不是框架
    leemove
        88
    leemove  
       2018-04-14 09:57:18 +08:00
    个人体验
    如果单论框架语法设计,api 和使用体验,vue>react.
    react 有一种偏向 js 的思想,vue 可能是更贴近使用者.jsx 什么的倒是无所谓,vue 一样可以写 jsx.虽然事实上大家使用 vue 的都不喜欢用 jsx.
    angular 是跟前两者没法对比的,因为差距太大了,框架的设计思想完全就是不同的.
    lucky2javascript
        89
    lucky2javascript  
       2018-04-14 10:21:39 +08:00
    框架简单好用才是根本。
    所以我选 VUE.JS
    Yuiham
        90
    Yuiham  
       2018-04-14 10:54:49 +08:00
    @jin5354 时序问题深有体会,所以现在都把 model 剥离出来,直接上 rxjs 把数据处理好喂给组件,比各种 watcher 好用多了
    wotemelon
        91
    wotemelon  
       2018-04-14 18:56:51 +08:00 via Android
    讲道理,相比 react,vue 的语法更清晰易懂
    leisure
        92
    leisure  
       2018-05-17 11:22:27 +08:00
    @Pastsong 33 天过去了...换了家公司,已入 react 坑,写起来还是很爽的嘛
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2728 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 12:44 · PVG 20:44 · LAX 05:44 · JFK 08:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.