zoukankan      html  css  js  c++  java
  • React 入门学习笔记1

    摘自阮一峰:React入门实例教程,转载请注明出处。

    一. 使用React的html模板

      使用React, 我们需要加载3个库,react.js, react-dom.js, 和browser.js.它们必须首先加载。

      其中react是核心库,react-dom是提供与dom相关的功能。browser是将JSX语法转换为JS语法,但这一步很耗时间。

      所以,模板结构大致如下:

    <!DOCTYPE html>
    <html>
      <head>
        <script src="react.js"></script>
        <script src="react-dom.js"></script>
        <script src="browser.min.js"></script>
      </head>
      <body>
        <div id="example"></div>
        <script type="text/babel">
          // ** 这里写我们的JSX代码,后面的代码全部加在这里 **
        </script>
      </body>
    </html>

      注意,<script>标签的type属性是text/babel。这是因为React使用独有的JSX语法,跟JavaScript不兼容。所以,凡是使用JSX的地方,都要加上

    type="text/babel"

    二. JSX语法

      上面说我们使用React会用到JSX语法,什么是JSX?

      HTML语言可以直接写在JavaScript中,不加任何引号,而这些HTML语言中又可以加JavaScript代码,只需要将js用{}包裹。这就是JSX语法,它允许HTML和

    JavaScript混写。

      语法规则:遇到HTML标签(以 < 开头),就用HTML规则解析;遇到代码块(以 { 开头),就用JavaScript 规则解析。

    var names = ['Alice', 'Emily', 'Kate'];
    
    ReactDOM.render(
    <div>
      {
        names.map(function (name) {
        return <div>Hello, {name}!</div>
        })
      }
    </div>,
    document.getElementById('example')
    );

    三. ReactDOM.render()

      ReactDOM.render是React的最基本的方法,用于将模板转为HTML语言,并插入指定的DOM节点。

    <!DOCTYPE html>
    <html>
      <head>
        <script src="react.js"></script>
        <script src="react-dom.js"></script>
        <script src="browser.min.js"></script>
      </head>
      <body>
        <div id="example"></div>
        <script type="text/babel">
          ReactDOM.render(
            <h1>Hello, world!</h1>,
            document.getElementById('example')
          );
        </script>
      </body>
    </html>

    四. 组件

      React允许将代码封装成组件(就是一个类似html标签的东西),然后像插入普通的HTML标签一样,在网页中插入这个组件。

      React.createClass方法用于生成一个组件类。

    var HelloMessage = React.createClass({
      render: function() {
      return <h1>Hello {this.props.name}</h1>;
      }
    });
    
    ReactDOM.render(
      <HelloMessage name="John" />,
      document.getElementById('example')
    );

      注意,组件类的第一个字母必须是大写。否则会报错,比如HelloMessage不能写成helloMessage。另外,组件类只能包含一个顶层标签,否则也会报错。

      组件的用法与原生的 HTML 标签完全一致,可以任意加入属性,比如 <HelloMessage name="John"> ,就是 HelloMessage 组件加入一个 name 属性,值为 John。

      组件的属性可以在组件类的 this.props 对象上获取,比如 name 属性就可以通过 this.props.name 读取。

      添加组件属性,有一个地方需要注意,就是 class 属性需要写成 className ,for 属性需要写成 htmlFor ,这是因为 class 和 for 是 JavaScript 的保留字。

    五. this.props.children 组件所有的子节点

      this.props对象的属性与组件的属性一一对应。但是有一个例外,就是this.props.children属性,他表示组件的所有子节点。

      this.props.children 的值有三种可能:如果当前组件没有子节点,它就是 undefined ;如果有一个子节点,数据类型是 object ;如果有多个子节点,数据类型就是 array 。所以,处理 this.props.children 的时候要小心。

      React 提供一个工具方法 React.Children 来处理 this.props.children 。我们可以用 React.Children.map 来遍历子节点,而不用担心 this.props.children 的数据类型是 undefined 还是 object。

    var NotesList = React.createClass({
      render: function() {
        return (
          <ol>
            {
              React.Children.map(this.props.children, function (child) {
                 return <li>{child}</li>;    //遍历它的两个子节点,对于每一个子节点,返回一个 <li>{child}</li>
              })
            }
          </ol>
        );
        }
    });
    
    ReactDOM.render(
      <NotesList>
        <span>hello</span>
        <span>world</span>
      </NotesList>,
      document.body
    );

    六. PropTypes 验证组件属性是否合法

      组件的属性可以接受任意值,字符串、对象、函数等等都可以。有时,我们需要一种机制,验证别人使用组件时,提供的参数是否符合要求。

      组件类的PropTypes属性,就是用来验证组件实例的属性是否符合要求

    var MyTitle = React.createClass({
      propTypes: {
        title: React.PropTypes.string.isRequired,
      },
    
      render: function() {
        return <h1> {this.props.title} </h1>;
      }
    }); ReactDOM.render(
      
    <MyTitle title=“ABC” />,   document.body );

      上面的Mytitle组件有一个title属性。PropTypes 告诉 React,这个 title 属性是必须的,而且它的值必须是字符串。否则会报错。

      此外,getDefaultProps 方法可以用来设置组件属性的默认值。

      

    var MyTitle = React.createClass({
      getDefaultProps : function () {
        return {
          title : 'Hello World'
        };
      },
    
      render: function() {
        return <h1> {this.props.title} </h1>;
      }
    });
    
    ReactDOM.render(
      <MyTitle />,
      document.body
    );

      上面代码会输出"Hello World"。

     

  • 相关阅读:
    从首页看CCS布局
    Community Server专题一:概述Community Server
    datagrid程序增加列的方法
    类的关键字
    base 关键字用于从派生类中访问基类的成员:
    关于CS1.1后台管理页面的研究
    如何:创建同步 HTTP 处理程序
    Community Server专题二:体系结构
    SqlTransaction 类
    单继承与多实现
  • 原文地址:https://www.cnblogs.com/lishuxue/p/6121691.html
Copyright © 2011-2022 走看看