码迷,mamicode.com
首页 > 其他好文 > 详细

React入门

时间:2014-09-28 16:51:43      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   io   ar   for   文件   

通常我学一门编程语言都是先从“hello world!”开始,React也不例外。

首先搞清楚React的运行方式,有2种,

 第一种:

          jsx语法糖直接编写在HTML中,这样不用离线转换jsx了。看下代码:

<!DOCTYPE html>
<html>
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
    <title></title>
</head>
<body>
<div id="example"></div>
<script type="text/jsx">
   /** @jsx React.DOM */
   React.renderComponent(
      <h1>hello,world!</h1>,
      document.getElementById(example)
   );
 </script>
</body>
<script src="js/jsx/react.js"></script>
<script src="js/jsx/JSXTransformer.js"></script>
</html>

这段代码就是jsx的写法,当执行之后页面展示如下:

bubuko.com,布布扣

并不复杂,很简单,renderComponent()函数实例化根组件、启动框架和注入标记成一个原始的DOM元素,作为第二个参数提供。有2个参数,第一个为jsx脚本(类似html模板,由JSXTransformer.js将其转换为标准js,再由浏览器render 为html),第二个选择的DOM对象,让第一个参数插入到选择的DOM对象中去,renderComponent()相似于jQuery中的$(document).ready(),都是初始化加载操作,但React没有用到Jquery的封装,完全自己实现的机制。在renderComponent()函数中,对参数做了多次的判断逻辑,比如说参数是不是Object对象,参数是不是function类型,第一个参数中的props属性是否为空字符串等等。。。

看下源码就可以了解到renderComponent()函数的实现机制了,

renderComponent: function(nextDescriptor, container, callback) {
    ("production" !== "development" ? invariant(
      //这里判断参数nextDescriptor是否是object对象,返回的是ture或false
      ReactDescriptor.isValidDescriptor(nextDescriptor),
      renderComponent(): Invalid component descriptor.%s,
      (
        //这里判断参数nextDescriptor是否是函数,isValidFactory返回的是类型
        ReactDescriptor.isValidFactory(nextDescriptor) ?
           Instead of passing a component class, make sure to instantiate  +
          it first by calling it with props. :
        // Check if it quacks like a descriptor
        //这里判断参数nextDescriptor属性中的props属性是否为空字符串
        typeof nextDescriptor.props !== "undefined" ?
           This may be caused by unintentionally loading two independent  +
          copies of React. :
          ‘‘
      )
    ) : invariant(ReactDescriptor.isValidDescriptor(nextDescriptor)));

    var prevComponent = instancesByReactRootID[getReactRootID(container)];

    if (prevComponent) {
      var prevDescriptor = prevComponent._descriptor;
      if (shouldUpdateReactComponent(prevDescriptor, nextDescriptor)) {
        return ReactMount._updateRootComponent(
          prevComponent,
          nextDescriptor,
          container,
          callback
        );
      } else {
        ReactMount.unmountComponentAtNode(container);
      }
    }

    var reactRootElement = getReactRootElementInContainer(container);
    var containerHasReactMarkup =
      reactRootElement && ReactMount.isRenderedByReact(reactRootElement);

    var shouldReuseMarkup = containerHasReactMarkup && !prevComponent;

    var component = ReactMount._renderNewRootComponent(
      nextDescriptor,
      container,
      shouldReuseMarkup
    );
    callback && callback.call(component);
    return component;
  }

这里调用了很多个封装的函数进行处理,renderComponent()函数就是进入React的第一个入口。

接下来用创建一个组件方式来写“hello,world!”

<!DOCTYPE html>
<html>
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
    <title></title>
<link rel="stylesheet" type="text/css" href="css/index.css"/> </head> <body> <div id="example"></div> <script type="text/jsx"> /** @jsx React.DOM */ var CommentBox = React.createClass({ render:function(){ return ( <h1 className=‘hcolor‘> hello,world! </h1>); } }); React.renderComponent( <CommentBox />, document.getElementById(example) ); </script> </body> <script src="js/jsx/react.js"></script> <script src="js/jsx/JSXTransformer.js"></script> </html>

在这段代码中,我用createClass()函数进行自定义组件的创建,其实所谓创建组件是官方说法,最终创建出来的就是DOM元素,只不过这里进行动态生成的机制,感觉更灵活。至于组件的内容还有高级组件的创建后期再分享。

注:这里有个细节,当在render中返回DOM元素的时候,设置css样式用className才生效,如果想直接加入style属性,无效并且页面也不展示DOM元素!

在页面展示如下:

bubuko.com,布布扣

以上介绍了第一种编程方式 接下来想把页面中的js抽取出来单独的js文件并引用,这样就需要下面的方式了;

第二种:

      jsx离线转换方式,在React官方网站已经详细说明了,

      首先安装命令行工具(要求npm):

       

npm install -g react-tools

     如果你的npm 运行连接失败,请设置一下npm的代理:

          设置代理的命令: npm config set proxy=http://127.0.0.1:8087

                                npm config set registry=http://registry.npmjs.org

在cmd中操作一下即可,下面就是构建本地创建的js

jsx --watch src/ build/

这里src是目录,你可以自己定义,操作完就可以单独引用js进行操作了。

      React还有很多要去研究,继续激情的前进着。。。

 

React入门

标签:des   style   blog   http   color   io   ar   for   文件   

原文地址:http://www.cnblogs.com/kuailingmin/p/3998187.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!