其实我并不想写些框架之间的对比,每个框架各有所长,大家也各有所爱,只想说“PHP是世界上最好的语言”^_^,虽然我没看过一眼PHP的代码。
工作中移动端我用的是vue 2.0,PC端为了兼容可恶的IE8用的是react 0.14,聪明的你肯定知道了我是更喜欢vue2.0的。
最早接触MV*框架是angular,话说那时我还不会jquery~,MVVM思想,更准确说是数据驱动的思想一开始就深入到代码中。后来有机会写jquery,也是数据驱动组件更新,虽然性能低,但必直接操作dom清晰的多。
接触react比vue要早,react的虚拟dom、diff更新和组件化让我觉得挺不错的,再加上redux的统一状态管理,单向数据流让我坚定的拥护react+redux+…技术栈。后来接触了vue1.0,写了个页面,感觉vue的api设计真心不错,而且提供了v-if、slot这种react JSX本应提供的东东,react虽都可实现,但大家都是想少写点代码的,希望用起来更顺畅,更舒心。vue1.0 的双向绑定和发送事件是一把双刃剑,用的好能随心所欲的更改状态,但一步留神就容易出bug。另一个不好的一点是,用惯了react写组件,vue1.0的组件生命周期定义的让我真蛋疼~
刚用vue1.0写完第一个页面,vue2.0 就正式发布了,看了更新内容,我觉得vue1.0 不好的地方它居然都改了,改的更像react了,对数据流进行了单向约束,不再提供随意的事件发送机制,给出了类似react的组件生命周期,原来我的意见作者也是想到了^_^。
总体来说vue2.0 符合渐进式的前端框架,作者也提供了一系列的生态库入vue-router、vuex等。与react相比,它不仅api更优雅,组件内容的双向绑定让你不用再在意props 和 state 的区别,全部都是state。当vuex的更新时,组件会自动更新内部由vuex控制的state。而react如果要实现,则首先需要将props转成state,state维护组件部分的状态,然后每次redux更新时,需要在componentWillReceive时根据新的props更新state。
关于react是否应该用state,我个人觉得纯粹的用props会导致state树包含过多不重要的状态属性,对应的action操作也增加,进而让代码臃肿化,降低开发效率。如果react能够做到像vue这样优雅的做到组件内部只有state,也就不会有用props还是用state的讨论了
现在写着react的项目越发觉得别扭,或许应该写些插件让react更像vue2.0 吧^_^