现在最热门的前端框架有AngularJS、React、Bootstrap等。自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我。

React的基础很简单,极易上手。

React全都是围绕着组件的, 所以React基础也就是:写组件的jsx、组件的生命周期以及组件的属性和状态。

  • jsx,只要是用过html模板的分分钟就能写了;
  • 生命周期就是组件在创建、销毁、更新阶段的那几个回调函数,让你有机会再这几个关键点上对组件和环境做点手脚;
  • 属性就像html标签里的属性一样决定了这个组件是什么样的;
  • 状态,像是属性很像也和属性很不同,它是可变的, 是控制组件的唯一入口,这个以后可得细说。
  • redux,其实就是在鼓捣状态。

React一个标新立异的地方:jsx(js扩展)

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

在text/jsx中的代码最初不会被浏览器理会,他会被react的JSXTransformer编译为常规的JS,然后浏览器才能解析。

<script src="react/build/react.js"></script>
<script src="react/build/JSXTransformer.js"></script>

或者

<script src="react/build/react.js"></script>
<script src="babel/browser.js"></script>

前者对应的type="text/jsx",后面对应的type="text/babel"

推荐使用text/babel,因为它支持ES6语法

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>React学习</title>
    <script  src="./js/react.js"></script>
    <script  src="./js/react-dom.js"></script>
    <script  src="./js/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.js 是 React 的核心库

react-dom.js 是提供与 DOM 相关的功能

Browser.js 的作用是将 JSX 语法转为 JavaScript 语法

ReactDOM.render()

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

React.createClass()

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

var Myfirst = React.createClass({
  render : function(){
    return    <div>我的第一个组件</div>;
  }
})
ReactDOM.render(
  <Myfirst />,
  document.getElementById('example')
);

ReactJS有一些奇怪的地方:

  1 : 组件首字母必须大写

  2 : render 是表达的意思,它的匿名函数必须有一个return

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

var HelloMessage = React.createClass({
  render: function() {
    return <h1>Hello {this.props.name}</h1>;
  }
});

ReactDOM.render(
  <HelloMessage name="John" />,
  document.getElementById('example')
);

组件嵌套(component):组件的高复合应用

一个页面我们可以认为是一个组件集合,它是由多个组件嵌套而成

    <script type="text/babel">
        var Myfirst = React.createClass({
            render : function(){
                return    (
                    <div>我的第一个组件</div>
                    <MySecond />
                );
            }
        })

        var MySecond = React.createClass({
            render : function(){
                return  (
                    <h3>我的第二个组件</h3>
                    <MyThird />
                );
            }
        })

        var MyThird = React.createClass({
            render : function(){
                return (<h6>我的第六个组件</h6>)
            }
        })

        ReactDOM.render(
          <Myfirst />,
          document.getElementById('example')
        );
    </script>

上面的代码会报错:Uncaught SyntaxError: embedded: Adjacent JSX elements must be wrapped in an enclosing tag

提示我们,嵌套的组件(component),必须要用一个标签包含,修改如下:

    <script type="text/babel">
        var Myfirst = React.createClass({
            render : function(){
                return    (
                    <div>            {/* 添加的包含标签 */}
                        <div>我的第一个组件</div>
                        <MySecond />
                    </div>
                );
            }
        })

        var MySecond = React.createClass({
            render : function(){
                return  (
                    <div>           {/* 添加的包含标签 */}
                        <h3>我的第二个组件</h3>
                        <MyThird />
                    </div>
                );
            }
        })

        var MyThird = React.createClass({
            render : function(){
                return (<h6>我的第六个组件</h6>)
            }
        })

        ReactDOM.render(
          <Myfirst />,
          document.getElementById('example')
        );
    </script>

React学习笔记(一) 基础知识的更多相关文章

  1. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  2. C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

    一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...

  3. C#学习笔记(基础知识回顾)之值传递和引用传递

    一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...

  4. C#学习笔记(基础知识回顾)之值类型和引用类型

    一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...

  5. Quartz学习笔记:基础知识

    Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...

  6. react学习笔记1--基础知识

    什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...

  7. .net学习笔记---xml基础知识

    一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基 ...

  8. Docker的学习笔记(一)基础知识

    概述 本人最近在学习docker相关的知识,既是工作本身的需要也是自己对技术的追求的必要,以后我也会推出容器相关的随笔,既可以增长自己的知识,也可以和读者广泛交流,岂不乐乎?话不多说.第一篇先介绍do ...

  9. Scala学习笔记--正则表达式基础知识、如何在scala内使用

    正则表达式语法:https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 基础知识:正则表达式30分钟入门教程 http://www. ...

随机推荐

  1. Bootstrap框架中的字形图标的理解

    最近项目中准备使用 Bootstrap 框架,看中了Ace Admin 这套皮肤,看其代码的时候,发现使用了字形图标.下面内容来源于网络,根据自己对新知识的学习曲线重新整合了一下: 一,字形图标的定义 ...

  2. 有7g和2g的砝码各一个,怎样称可以3次把140g东西分为50g和90g???????

    第一次:等分 50和90为   70 70 2.   7g 和2g  ,取出一个70中的9g   ,  61   70 3.利用 9g和2g砝码,取出61中的11克,前面的9 和 11 都放进70

  3. bzoj 1007 [HNOI2008]水平可见直线(单调栈)

    1007: [HNOI2008]水平可见直线 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5120  Solved: 1899[Submit][Sta ...

  4. JavaScript高级程序设计47.pdf

    触摸设备 iOS和Android设备的实现非常特别,因为这些设备没有鼠标,在面向iPhone和iPod中的Safari开发时,要记住以下几点 不支持dblclick事件,双击浏览器窗口会放大画面,没有 ...

  5. ubuntukylin(64bit)安装推荐

    UbuntuKylin是Ubuntu社区中面向中文用户的Ubuntu衍生版本,与麒麟系统没有关系.它是由工信部软件.集成电路促进中心(CSIP).国防科技大学(NUDT)与国际著名开源社区UBUNTU ...

  6. Linux下SVN命令总结

    目录 一.从版本库获取信息... 1 二.从版本库到本地... 2 三.从本地到版本库... 2 四.高级应用... 4 一.从版本库获取信息 svn help command 获取子命令说明 svn ...

  7. 完美转换MySQL的字符集 Mysql 数据的导入导出,Mysql 4.1导入到4.0

    MySQL从4.1版本开始才提出字符集的概念,所以对于MySQL4.0及其以下的版本,他们的字符集都是Latin1的,所以有时候需要对mysql的字符集进行一下转换,MySQL版本的升级.降级,特别是 ...

  8. JSP_DAO方式实现数据库查询(MyEclipse10,Tomcat7.0,JDK1.7,)——Java Web练习(四)

    1.项目结构: 2.创建数据库.表.插入记录 create database TestDao; use TestDao; create table student( stuid int, userna ...

  9. Sublime Text 3 格式代码插件 codeFormatter

    一款可以对html.JS.CSS.PHP.python代码格式化的sublime插件 默认快捷键ctrl+alt+F,默认可以对html.js.css格式代码, 如果想对PHP格式化,需要PHP5.6 ...

  10. iOS使用技能 - 短信,语言验证码的获取与验证小结

    最近有学习一个小技能,这里小结一下,分享给大家,互相交流. 首先是大体步骤: 在mob官网注册,然后添加短信验证的应用 使用cocoapods导入框架 Podfile文件: platform :ios ...