这篇博客是我通过阅读React官方文档的教程总结的学习笔记,翻译可能存在误差,如有疑问请参见http://reactjs.cn/react/docs/tutorial.html

一.所需文件

在编写react代码前需要在html文件中引入三个文件



我通过bower把react.js和react-dom.js下载在本地,这样在刷新浏览器时,浏览器加载会更快。第三个文件是react解码器,由于react用到的语法是jsx,浏览器是不能直接执行jsx语法的,要想你写的react代码在浏览器中运
行,就必须将jsx转换为js代码,第三个文件可以达到将jsx转换为js的目的,当然这并不是唯一一个将jsx转换为js的方法。你还可以使用创建工具gulp或者grunt来将jsx转化为jsx。 二.开始学习代码
  1.编写第一个react程序
    
html文件的核心代码如下(html文件很简单)
      <body>
         <div id="contentOther"></div>
         <script type="text/babel" src="index.js"></script>
      </body>
    html文件代码解释
    a:由于react并不是真正的js代码,所有script标签的type属性不能是text/js,而应该是text/babel
    index.js的代码如下
      
    
    index.js文件代码解释
    a:React.createClass()方法用于创建一个自定义组件,它接受一个对象作为参数
    b:Content是一个自定义组件,在react中自定义组件必须以大写字母开头,dom自带的元素名以小写字母开头,如div,span等.
    c:每个react组件可以拥有多个方法,其中最重要的方法是render方法,这个方法返回一个最终渲染到HTML中的组件树。render只能返回一个单一的组件,如果要返回多个组件,必须将将它们包裹到一个根组件里。
    d:在react中有两种组件,分别为自定义组件(如:Content)和自带组件(如:div等),react可以为组件添加类,react为组件添加类使用的属性是className,在上述demo中为div组件添加了一个other的类
    e:ReactDOM.render()方法用于实例化根组件,它接受两个参数,第一个参数是一个XML标签形式的组件名,它必须闭合,第二个参数是一个dom节点。意味着将指定的根组件渲染到指定的dom节点中。这个方法
    必须放在组件定义之后。
    二.using props
       
html文件的核心代码
      <body>
        <div id="list"></div>
         <script type="text/babel" src="index.js"></script>
      </body>
   index.js文件的代码如下
    
    index.js文件代码解释
 
   a:jsx语法规定,表达式必须要在花括号中,语句不能放在花括号中,如if语句不能放在花括号中。
    b:有两种为组件添加属性的方法:(1)
                <Component name="li" age="12"/>
                 (2)
                var props = {
                  name:"li",
                  age:"12"
                };
                <Component {...props}/>
    可以将任何合法的数据类型添加到组建的属性,如函数,数组等
    c:组件的所有数组都保存在组件的props对象中,通过this.props.propsName可以获得指定的属性值
  三. state
  html文件的代码如下
  <body>
    <div id="contentList"></div>
    <script src="index.js" type="text/babel"></script>
  </body>
  index.js文件的代码如下
    comments.json文件的内容如下:
      [
      {
      "id": 1388534400000,
       "author": "Pete Hunt",
      "text": "Hey there!"
      },
      {
      "id": 1420070400000,
      "author": "Paul O’Shannessy",
      "text": "React is great!"
      }
      ]
  
  index.js文件代码解释
 
  a:在这个demo中用到了ajax请求,请求的操作是通过jQuery的$.getJSON()方法实现的,所有除了引入之前提到的那三个文件外,还要引入jquery。ajax请求的文件是comments.json,请求成功返回一个Json数据
   b:自定义组件都有state,在组件中通过this.state.stateName可以取得指定的state,与props不同的是在一个组件内部可以改变自己的state,但是不能改变props,组件的props只能通过父组件去改变。
   c:组件可以通过setState()去改变自己的state,当组件的state发生变化后会再次执行render函数,即重新渲染组件,
   d:getInitialState()用来设置组件的初始state,在组件的生命周期只被执行一次,而且它会比render先执行
   e:componentDidMount()是一个react组件首次被render后立即自动调用的方法。在这个demo中ContentList组件的初始state data是一个空数组,在组件ContentList第一次被render后会立即调用
   componentDidMount()方法去修改组件的state,在修改了state后,组件会再次被render,但是组件再次被render之后就不会在调用componentDidMount()方法了。
   f:在React中,组件有两种数据模型,分别是props和state,在react这篇官方文档中,详细的说明了props和state的区别,以及它们的应用场景。我看了这篇文章的结论是:在做交互性功能上才使用state,在
    下面这三种情况下不要使用state:
                (1)数据来自于父组件
                (2)数据不会随时间改变
                (3)数据可以基于其他state或props计算得到
  

   四.event
  
html文件代码如下
  <body>
  <div id="content2"></div>
  <script type="text/babel" src="index.js"></script>
  </body>
  js文件代码如下
  

  index.js文件的解释
  a:组件的event是作为props存在,event名采用驼峰命名.
  b:在这个demo中实现的效果是:在输入框中输入内容,当点击OK按钮后,将输入的内容插入下方的无序列表。为了实现这个效果我创建了三个组件,分别为:ContentBox,
  Form以及List,其中Form和List是ContentBox的子组件。由于父组件ContentBox需要从子组件Form得到输入的值,所以我给Form添加了一个名为onContentSubmit的props
  这个onContentSubmit是一个回调函数。这个回调函数在From触发submit事件(即ok按钮被点击)后被调用。onContentSubmit的执行会导致ContentBox的state被改变,
  前面已经说过,组件的state改变,会使组件重新render。List的props item等于ContentBox的state data ,所以只要ContentBox重新render也会改变List的
  props item改变。所以输入框输入的值可以插到无序列表中
  关于event我还写了另位一个demo,在这里供大家参看,这个domo我就不做解释了,
  html文件核心代码如下
  <body>
  <div id="content"></div>
  <script type="text/babel" src="index.js"></script>
  </body>
  index.js文件核心代码如下
  

   

React入门基础(学习笔记)的更多相关文章

  1. es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式

    es6 Object.assign   目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...

  2. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  3. 【C#编程基础学习笔记】4---Convert类型转换

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...

  4. 【C#编程基础学习笔记】6---变量的命名

    2013/7/24 技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...

  5. 1.C#基础学习笔记3---C#字符串(转义符和内存存储无关)

    技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com ------------------------------------- ...

  6. Webpack新手入门教程(学习笔记)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 30.0px Helvetica; color: #000000 } ...

  7. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  8. Mysql数据库基础学习笔记

    Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...

  9. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  10. Java基础学习笔记(一)

    Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...

随机推荐

  1. OKHttp3学习

    转载 Okhttp3基本使用 基本使用——OkHttp3详细使用教程 一.简介 HTTP是现代应用常用的一种交换数据和媒体的网络方式,高效地使用HTTP能让资源加载更快,节省带宽. OkHttp是一个 ...

  2. PHP扩展功能 ---- 页面静态化(OB缓冲)

    一.入门三部曲 1.什么是页面静态化 百度百科介绍: 静态页面是网页的代码都在页面中,不需要执行asp,php,jsp,.net等程序生成客户端网页代码的网页,静态页面网址中一般不含"?&q ...

  3. cocos2d-x开发: 如何从项目中分离出接口范例

    cocos2d-x开发,包括核心模块接口开发和脚本部分的业务逻辑实现.从上层应用需求开始说,脚本在做业务逻辑实现的时候, 很多时候都需要依赖底层的接口功能,但是不是所有的人都可以游刃有余的去明白该怎么 ...

  4. CCF认证201803-1 跳一跳

    import java.util.Scanner; public class Jump { public static void main(String[] args) { Scanner sc = ...

  5. NIO高并发基础

    NIO高并发 是jdk1.4出现的新的流. NIO - New IO - 同步式非阻塞式IO BIO - Blocking IO - 同步式阻塞式IO ---UDP/TCP ==AIO - Async ...

  6. Struts2框架学习笔记--strtus2初识

    struts2概述: 1.struts2框架应用于javaEE三层结构中的Web层框架 2.struts2框架是在struts1和webwork基础之上发展的全新框架(脱胎换骨 ,用法完全不一样)ps ...

  7. oAuth2.0认证流程图

    这两天在看oAuth2.0的东西,简单的使用visio画了个流程图.演示的是用户登录慕课网,使用qq登录的流程:

  8. koa2学习笔记03 - 给koa2配置session ——koa2结构分层、配置数据库、接口

    前言 这一章写的很没有底气,因为我完全不懂一个正经的后台应用是怎么结构分层的, 所有只能按照我自己的理解去写,即使这样也仅仅只分离出了controller层, 至于所谓的service层,dao层,完 ...

  9. mongdb的聚合管道

    我们先介绍一下 MongoDB 的聚合功能,聚合操作主要用于对数据的批量处理,往往将记录按条件分组以后,然后再进行一系列操作,例如,求最大值.最小值.平均值,求和等操作.聚合操作还能够对记录进行复杂的 ...

  10. Laravel源码分析--Laravel生命周期详解

    一.XDEBUG调试 这里我们需要用到php的 xdebug 拓展,所以需要小伙伴们自己去装一下,因为我这里用的是docker,所以就简单介绍下在docker中使用xdebug的注意点. 1.在php ...