ReactJS 编程风格方面的疑惑 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
simonlify
V2EX    React

ReactJS 编程风格方面的疑惑

  •  
  •   simonlify 2016-06-29 11:39:33 +08:00 3279 次点击
    这是个创建于 3462 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先我介绍一下大概情况,本人一直从事服务器端,前端开发工作,但是极少用到 AngularJS,ReactJS 这类框架技术,常用的就是 Javascript , jQuery 等等,所以这方面的知识还是有的

    最近一段时间,自我感觉有必要学一下当下流行的 JS 框架,决定从 React 入手,经过一周断断续续的官方文档的阅读,已经对它有了一定的了解,也自己写过一些 demo ,那么我的问题来了

    我发现 React 和 JQuery 从风格上最大的一点不同就是 React 把 js 和 html 融合在一起了,不像之前的, html 页面中, body 中间放 html 结构,下面 script 标签中放 js ,当然官方文档中也提到了这样做的好处,我也在 github 上下了一些简单的项目作为参考,但还是没搞太明白,所以我想问的是,这种 js 和 html 交叉融合是否是 React 的正常风格?或者说常规写法是否如我理解的那样?还请各位不吝赐教!再次感谢!

    7 条回复    2016-06-29 20:11:19 +08:00
    mdluo
        1
    mdluo  
       2016-06-29 13:43:18 +08:00
    React 并不是 JS 和 HTML 融合,而是 JSX ,一种类似于 HTML 的语法(其实是 JS ),用来定义虚拟 DOM 的结构

    由于 React 已经把页面拆分成了一个个 Component ,每个模块管理自己的状态,所以不再需要用 jQuery 的 HTML DOM 选择器了,其他的工具函数也可以用 lodash 等替换。

    然后至于浏览器中的 HTML 结构,一般是用 webpack 或者 browserify 来把 JS 打包成一个文件,嵌入到服务器输出的一个简单 HTML 中。当然可以用 SPA 的模式,也可以用 Isomorphic 的模式
    ianva
        2
    ianva  
       2016-06-29 14:21:45 +08:00
    react 把业务抽象成一个个组件,组件又即是标签
    js 和 html 交叉融合这件事情本身不是前端逻辑维护上的问题
    前端最大的问题其实就是 jquery 和 dom 直接操作,带来的操作 dom 的同时用又融入业务逻辑,这样 dom 的操作和业务逻辑无法分离,而产生维护性和复用性的问题
    所以不管是 angular 还是 react 都更容易维护

    关于 js 和 html 融合的维护性问题主要是早期,所有东西都写在 html 文档上,其实相当于, js , css , html 糅杂再一起然后再加上 dom 操作做和业务逻辑交错产生的更麻烦的问题
    很显然 react 如果组件化抽象并并不会带来以上问题,当然如果你把整个页面和所有模块都丢在一个 render 里上述事情就会发生
    SuperMild
        3
    SuperMild  
       2016-06-29 15:11:37 +08:00 via iPad
    lz ,你说的 html 应该是指真实 DOM ,而在 react 里是尽量避免直接操作真实 DOM 的,应该用 JSX 来写组件,然后操作组件, react 会自动帮你采用最高效的方式更新真实 DOM 。

    这种方式非常优秀,简直是革命性进步,你可以先写一个包含一切的大组件,当觉得太复杂时随时可以非常方便的把其中一部分抽出来做小组件,这样做逻辑非常清晰,过十年回头一看代码都能秒懂其业务逻辑。
    yaochiqkl
        4
    yaochiqkl  
       2016-06-29 16:10:36 +08:00
    该类 MV*框架对前端带来了很多优势,比如说数据绑定,数据得到了更新,直接页面上就可以变化,而不是需要 JQuery 那样不想断地选择 DOM 和更新节点。当重前端的 web 富应用代码复杂到一定程度时,做到前端的数据和页面的分离是有必要的。
    ChefIsAwesome
        5
    ChefIsAwesome  
       2016-06-29 16:50:47 +08:00
    jQuery -> 前端模板 -> MVC -> react
    你直接从头跳到尾,步子迈大了,当然不知道怎么回事。
    simonlify
        6
    simonlify  
    OP
       2016-06-29 20:09:55 +08:00
    @ChefIsAwesome 哈哈,看了上面的回复,觉得你说得很有道理!
    simonlify
        7
    simonlify  
    OP
       2016-06-29 20:11:19 +08:00
    @ianva
    @mdluo
    @SuperMild
    @yaochiqkl
    非常感谢各位的讲解,对我很有启发!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2505 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 10:59 PVG 18:59 LAX 02:59 JFK 05:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86