用 react 写了个 v 站首页,我感觉能用来钓鱼

2015-12-27 17:32:39 +08:00
 kisnows

为了练手,用 react 写了个 V2EX 的首页:
页面地址可以看一下能不能用来钓鱼
项目地址

整个项目基础 react 搭建,样式本来打算用 inlineStyle 来写的,但是发现写起来太累,于是还是用回到 sass,最后用 webpack来编译。
本来想着看能不能直接调用 V 站的 API 来做一个纯前端的首页,所有的数据都用 ajax 来调,但是发现因为跨域的问题,前端无法拿到数据,也就放弃了,最终也只能是一个静态页面。

说一下写代码中遇到的一些问题吧,项目结构可以参考 Github

优点

先说说用 react 写的优点,它火起来不是没有道理的,确实是有很多优点的,我这里只说实际码代码中的优点,不涉及 virtualDom 带来的性能提升之类的。

结构清晰

因为 react 本身就是组件化的,所以整个页面按结构被分为几个组件,每个组件自己管理自己的展示和行为,最后通过容器组合起来,结构非常清晰。
组件的状态都是通过 state 或者 props 来控制,而我认为大多数组件只需要 props 就行了,只在顶层组件上控制 state ,这样可以更加清晰的管理 state 。

易于维护

因为结构清晰,所以可以预想到,这样是易于维护的。比如头部要改结构和样式,那就只改 Hearker.js 和对应 _Header.scss 就行了,或者要改逻辑,那只要修改 Hearker.js 中和 props 或者 state 相关的代码就行了,不用像以前那样在整个页面的逻辑里面去找这块的代码。
这根我目前维护的一些老项目来比,维护性上简直是天壤之别,再也不用愁找不到代码在哪改了,也不用吐槽那一串串的不知道干什么的 jquery 代码了。

省去了模版引擎

因为 react 可以说是自带了模版引擎,类似的 jade 或者 ejs 之类的模版引擎也就不需要了,类似这样拿到数据直接渲染就行了。
javascript
<div>
{Hot.map((topic, index) =>
<TopicsHotItem {...topic}
key={index}
/>
)}
</div>

缺点

组件划分大小的疑惑

一个页面到底要划分成几个部分?根据逻辑分还是根据页面布局分?组件分到那个层级?像 V 站的这个头部,是划分成一个组件还是三个?

当然这个可能不能算是缺点,可能是因为我经验不足以至于无法确定该如何化分。

报错不友好

比如我 className 习惯性的写成了 class ,然而 console 里面只是报了个 Did you mean className 的错,但是报不出来错在哪个文件,更不用指望报错在哪行了?只能自己去找,当项目大起来的时候,这个肯定很坑爹。

总结

整体来说, react 写起来还是很爽的,而且优点也很明确,组件化、单向数据流、函数式编程,虽然有一些不成熟的问题,但是优点还是突出,如果可以的话,在一些小型项目里实际试水一下应该还是不错的。

5767 次点击
所在节点    分享创造
29 条回复
plantain
2015-12-28 07:22:56 +08:00
class 报错位置不明确的问题,我可以用 tsx 解决, VSCode 或 Atom 上写代码时,就会错误的位置有提示;
组件划分粒度的问题,和一般的函数粒度的划分策略一样,先一个页面对应一个组件,方便路由,然后页面间可复用的部分,抽出来做成组件。
kisnows
2015-12-28 09:25:20 +08:00
@plantain 我现在用的是 webstorm ,是没有报错的。回头我试试 vscode 。
组件划分这个,按页面来感觉是不是有点太粗了。
plantain
2015-12-28 10:43:23 +08:00
我说的是一种策略,页面和可复用的部分肯定是个组件,先做,剩下的部分看时间、个人习惯了,时间多就分细一点,时间少就分粗一点。
就和函数的粒度策略一样,先写在一个函数里,有重复的话,就把重复部分抽出来,剩下的部分就看时间、个人习惯了。
oubushixb
2015-12-29 19:28:56 +08:00
还是喜欢 angular 的 ngIf 、 ngFor 之类的 html 模板..不太喜欢 react 这种 js 代码和模板弄在一起..就像当年部分 php 极客号称 php 是最好得模板语言一样....(phper 别激动,自己人,当年也是用 php 和 yii 框架入的互联网坑
kisnows
2015-12-29 20:26:35 +08:00
@oubushixb 这个其实看个人喜好了, angular 和 react 我用的都不多, angular 只是维护过一个项目。相比较而言,我还是觉得 react 这种 jsx 的写法感觉好一点。
不过,没在实际项目中使用过,也不太好说。
oubushixb
2015-12-29 20:46:39 +08:00
@kisnows 恩..说到底技术只是一种达成产品得手段..用什么其实都无所谓.顺手就好
kisnows
2015-12-29 20:49:46 +08:00
@oubushixb 我也是这样觉得。
看这几天前端大神们微博掐架,觉得好没必要。
irainsoft
2015-12-30 14:09:25 +08:00
咱能先把移动端做好吗[(--)]
kisnows
2015-12-30 14:48:36 +08:00
@irainsoft 工作忙,还没空写移动端,⊙﹏⊙

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/246487

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX