React入门


入前端大坑也有快半年了,花了三个多月啃《JavaScript高级程序设计》,至今还谈不上什么深刻理解,对于原生js 的闭包、原型链等特性也仅仅是能说个大概而已。稀里糊涂的想接触一些框架和库,一开始看了一下AngularJS,但是一谈到MVC就有点懵逼,因为没有任何后端经验,所以MVC对我来说也只是个概念,对于model、view、controller也都没有清晰的认识。
  更为头疼的是,当我们跨过了基础阶段,接触到这些框架级的概念时,大牛们讨论的一切仿佛和我们不在一个时代,而当我看到React就像看到救星一样,没有一大堆繁琐的概念,从MVC的角度来说它只实现了View层面,虽然这两个框架的学习曲线都足够陡峭,但我还是义无反顾的跳入了React的大坑。

注意:我不是说React就比AngularJS更简单,相对于AngularJS辣么多晦涩难懂的概念来说,React更适合我入门以及对MVC有个基本的认识

起源


React.js起源于facebook的一个内部项目,因为facebook对于市面上的JavaScript的MVC框架都不太满意,所以决定自己造轮子(所以我也不知道为啥人家不满意)。起初只是用来假设Instagram网站,后来发现这玩意挺好用,所以就在2013年5月开源。到目前为止,Reactgithub上已经有了47158个star,而项目也已经经历了很多个版本的更新,目前最新版是15.2.1。由于React性能出众,代码逻辑简单,以及虚拟DOM这个革命性的创新,使得它逐渐被广大前端开发者所接受(大厂出品,值得信赖)。

Demo


一个简单的Reactdemo看起来是这样的

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>hello world</title>
        <script src="http://facebook.github.io/react/js/react.js"></script>
        <script src="http://facebook.github.io/react/js/react-dom.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.23/browser.min.js"></script>
    </head>
    <body>
        <div id="example"></div>
        <script type="text/babel">
            var Hello=React.createClass({
                render:function(){
                    return <div>Hello {this.props.name}</div>
                }
            });
            ReactDOM.render(
                <Hello name="World!"/>,
                document.getElementById('example')
            );
        </script>
    </body>
</html>

以上就是一个简单的React应用程序,我们可以注意到在html中引入了三个js文件,分别是react.jsreact-dom.js、以及browser.min.js
  需要注意的一点是,在0.14版本发布之后,原先的React被分割为react和react-dom两个模块,其中react模块负责组件相关的一些核心API,而react-dom显而易见则是负责与dom相关的一些API。具体到这段代码中,React.createClass则是核心模块react所提供的API,而ReactDOM.render是react-dom模块所提供的API
  我们很容易就会注意到,这段代码中的JavaScript部分有些不同。首先,type变成了text/babel,这是因为React提供的JSX语法浏览器本身无法解析,所以需要使用babel提供的browser.min.js将它转换为原生js,而这里的type也相应的要写为"text/babel"。而所谓JSX语法,在render方法中就有所体现,如果将这段JSX代码转换为原生js,那么它会是这样的

var Hello= React.createClass({displayName: "HelloMessage",
  render: function() {
    return React.createElement("div", null, "Hello ", this.props.name);
  }
});

React.render(React.createElement(HelloMessage, {name: "World!"}), mountNode);

事实上也可以这样写,只不过react更推崇用JSX的语法来创建组件,在这段代码中,首先使用React.createClass方法创建了一个对象,这个对象的名字是Hello,这也将是一个React组件,可以在app中的任何位置使用。Hello对象中包含了一个名为render的方法,顾名思义这是渲染组件的意思,这个方法需要返回一段html,而JSX语法最大的特点也是这里,使用JSX语法我们不需要再用引号将html代码包起来,而是直接按照html语法来书写,省略了一对引号但React仍然会很好的解析为HTML代码

使用JSX语法有几点需要注意

  • render方法中返回的HTML代码只能有一个根节点
      无论你的组件有多复杂,它必须被唯一的一个dom节点所包含,如果你这样写则是错误的
 render:function(){ 
      return (
              <div>
                    Hello {this.props.name}
              </div>
              <h1>World!</h1>
      )
 }
 //这段代码的div和h1属于同级标签,这在React中是不允许的,你应该将他们用一个父容器包裹起来
  • render方法返回的HTML代码中标签的class属性应该写为className,for属性也应该写为htmlFor
      这是因为class与for都是JavaScript的保留字
render:function(){ 
      return (
              <div className="keke">
                    Hello {this.props.name}
                    <label htmlFor="check">请选择</label>
                    <input id="check" type="checkbox"/>
              </div>
      )
 }
  • 使用React.createClass创建的组件名第一个字母必须大写

在这个例子中,React.createClass创建的组件还没有被渲染到页面中,需要使用ReactDOM.render方法,这个方法接收三个参数,插入的组件(类似于HTML标签的写法),被插入的父容器(应该被定义在HTML文件中并带有id属性的一个节点),以及一个可选的回调函数(这个函数将在组件被渲染到页面上之后执行)。运行这个例子,页面上将会渲染出Hello World!
  这里推荐使用Chrome浏览器调试React应用程序,并安装React Developer Tools(React开发者工具),这个工具可以帮助你在Chrome浏览器中随时查看组件的相关信息

以上就是React入门的一些基本概念,props以及state相关概念将在后续文章中详细解答

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 现在最热门的前端框架,毫无疑问是React。在基于React的React Native发布一天之内,就获得了 50...
    Mycro阅读 1,002评论 3 6
  • 作者:阮一峰原文地址:http://www.ruanyifeng.com/blog/2015/03/react.h...
    IT程序狮阅读 1,087评论 0 16
  • 1.React 的学习资源 react官方首页https://facebook.github.io/react/ ...
    贾里阅读 2,830评论 0 0
  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 2,809评论 1 18
  • react简介 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript M...
    宸桐阅读 3,135评论 2 5