一、 jsx

  1. 被称为语法糖:糖衣语法,计算机语言中添加的某种语法,对语言的功能没有影响,更方便程序员使用,增加程序的可读性,降低出错的可能性

    类似的还有(coffeescript,typescript),最终都被解析为js

  2. 解析jsx的是jsxtransformer.js      指定jsx语法用<text/jsx>

  3. 通过以下代码渲染dom

 React.render(<hello name=”world”/>,
Document.getElementbyId(“container”));
var hello = React.createClass({
render: function(){
return <div>hello {this.props.name}</div>;
}
}); React.render(<hello name="world"/>,
document.getElementById("container'));

  props是指属性组,this是实例

二、 css

  1. class

   不能在标签上直接写class,需要改为className  (由于此处非真正的dom,class是关键字,不能解析)

var Hello = React.createClass({
render: function(){
return <div className="redfont">hello {this.props.name}</div>;
}
});

  2. 内联式

      不能字符串来表示,需要用样式对象来表示,样式对象是以驼峰标示写法,值为样式值

var Introduce = React.createClass({
render: function(){
return <div style={{fontSize:'44px'}}>{this.props.info}</div>;
}
});

  {}中是执行表达式

  {{}}内联样式写法

  驼峰表达式:

render: function(){
//定义样式内容,样式obj
var styleObj = {
color: 'red',
fontSize:'32px'
};
//className代替class
return <div className="redfont" style={styleObj}>hello {this.props.name}</div>;
}

三、React components生命周期

   

  1. Mounted是:React Components被render解析生成对应的DOM节点并被插入浏览器的DOM结构的一个过程。

  2. Update是:一个mounted的React Components被重新render的过程。
   对比当前state变化

   State

   每一个状态react都封装了对应的hook函数~钩子

   这种函数是Windows消息处理机制的一部分,通过设置“钩子”,应用程序可以在系统级对所有消息、事件进行过滤,访问在正常情况下无法访问的消息。

   对事件进行hook后系统会受到相应通知

  3.Unmounted是:一个mounted的React Components对应的DOM节点被从DOM结构中移除的这样一个过程。

     

    

    GetInitialstate

    最终返回一个object其中包含其state

getInitialState:function(){
alert('init');
return {
opacity:1.0
};
}

    This

    是伴随函数生成时的函数内部实例对象

    随着函数运行在不同的环境发生变化

    始终指的是调用函数的那个对象

    1.  当其出现在settimeout函数参数中时,由于函数参数就是一个纯粹的函数调用,不隶属于其他对象,隶属于全局对象,属于global
    2.  当其出现在setinistialstate这样的函数体内,是作为其所属实例对象的方法来调用,此时this指component实例对象
    3.  This出现在构造函数:
function test(){
this.x = 1;
}
var o = new test();

    this 指新生成的对象

      4.   This出现在apply call bind等方法

        作用函数的调用对象,指第一个参数

四、 React-component-listener

  1. Dom更新

  传统:直接修改dom的innerhtml或classname

  事件绑定:Eventlistener

  React:

  给组件添加事件绑定(on驼峰式命名方式)

render: function (){
  return(
    <div>
      <button onClick={this.handleClick}>显示|隐藏</button>
      <span ref="tip"> 点击测试</span>
    </div>
  );
}

  添加点击事件:onClick={this.xxxxx}

  与dom绑定不一样,这里不是真实的dom节点,大小写敏感,通过对象属性定义在对象实例上

var Btnclick = React.createClass({
handleClick: function(event){
},

  Event对象是在js原生基础上封装的,因此同时具有原生event方法

  2. 获取组件

  1)使用‘ref’ property标记组件

  用ref属性给子组件添加名字,通过this.refs可以索引到子组件

render: function (){
return(
<div>
<button onClick={this.handleClick}>显示|隐藏</button>
<span ref="tip"> 点击测试</span>
</div>
);
}

  this.refs.tip

  索引到的是react component而不是真实的dom节点

  2)在dom里获得这个节点:

  使用react提供的方法:ReactDOM.findDOMNode(react component)

五、 补充

  ajax

   组件的数据来源,通常是通过 Ajax 请求从服务器获取,可以使用 componentDidMount 方法设置 Ajax 请求,等到请求成功,再用 this.setState 方法重新渲染 UI 

 var UserGist = React.createClass({
getInitialState: function() {
return {
username: '',
lastGistUrl: ''
};
}, componentDidMount: function() {
$.get(this.props.source, function(result) {
var lastGist = result[0];
if (this.isMounted()) {
this.setState({
username: lastGist.owner.login,
lastGistUrl: lastGist.html_url
});
}
}.bind(this));
}, render: function() {
return (
<div>
{this.state.username}'s last gist is
<a href={this.state.lastGistUrl}>here</a>.
</div>
);
}
}); ReactDOM.render(
<UserGist source="https://api.github.com/users/octocat/gists" />,
document.body
);

上面代码使用 jQuery 完成 Ajax 请求,这是为了便于说明。React 本身没有任何依赖,完全可以不用jQuery,而使用其他库。

六、 注意事项

  1. 注意react更新后的变化

  2. 返回虚拟dom时包装为一个div,保证返回一个结果

  3. 组件的首字母必须大写,不然不报错也不显示

  4. this.refs.[refName] 属性获取的是真实 DOM ,所以必须等到虚拟 DOM 插入文档以后,才能使用这个属性,否则会报错

  5. this.props 和 this.state 都用于描述组件的特性,可能会产生混淆。一个简单的区分方法是,this.props 表示那些一旦定义,就不再改变的特性,而 this.state 是会随着用户互动而产生变化的特性。

  6. 用户在表单填入的内容,属于用户跟组件的互动,所以不能用 this.props 读取,而要定义一个 onChange 事件的回调函数,通过 event.target.value 读取用户输入的值。textarea 元素、select元素、radio元素都属于这种情况

  7. 使用map遍历时注意:

  

  8. grunt build可以用npm run list 代替

以上为慕课网《react入门》总结,所有试验代码地址已上传至git:https://github.com/chaoranwill/chaoran-home/tree/master/react/react-mytest  欢迎fork/clone

视频教程来源:MOOC      其他教程推荐:阮一峰

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. JavaScript入门--慕课网学习笔记

     JAVASCRIPT—(慕课网)入门篇 我们来看看如何写入JS代码?你只需一步操作,使用<script>标签在HTML网页中插入JavaScript代码.注意, <script&g ...

  3. 慕课网笔记之oracle开发利器-PL/SQL基础

    实例1--if语句 /* 慕课网Oracle数据库开发必备之PL/SQL_2-3 判断用户从键盘输入的数字 1.如何使用if语句 2.接收一个键盘的输入(字符串) */ set serveroutpu ...

  4. 【react】慕课网视频学习笔记

    1.JSX:语法糖,对语言的功能并没有影响,但更方便程序员使用,增强可读性. 2.jsFiddle:前端在线调试工具 3.为什么要把this额外声明成_self变量,因为window.setTimeo ...

  5. JS入门-慕课网

    javascript是一种弱类型的数据交互语言, ch 1 数据类型 js中有六种数据类型:nunmber.string.boolean.null.undenfined.object原始类型:numb ...

  6. Android仿微信界面--使用Fragment实现(慕课网笔记)

    1 效果图  这里我们没有实现滑动切换view的功能 2 具体实现: 2.1 布局文件:top.xml, bottom.xml,tab01.xml,tab02.xml,tab03.xml,tab04. ...

  7. 快速上手Linux 玩转典型应用_慕课网笔记

    1.没有exe安装程序 2.区分大小写 3.一切皆文件 4.文件后缀不是那么重要,只是为了好识别 -------------------------------------------------- ...

  8. Python爬虫入门教程 20-100 慕课网免费课程抓取

    写在前面 美好的一天又开始了,今天咱继续爬取IT在线教育类网站,慕课网,这个平台的数据量并不是很多,所以爬取起来还是比较简单的 准备爬取 打开我们要爬取的页面,寻找分页点和查看是否是异步加载的数据. ...

  9. React 入门学习笔记整理目录

    React 入门学习笔记整理(一)--搭建环境 React 入门学习笔记整理(二)-- JSX简介与语法 React 入门学习笔记整理(三)-- 组件 React 入门学习笔记整理(四)-- 事件 R ...

随机推荐

  1. Spring Resource之ResourceLoaderAware接口

    ResourceLoaderAware接口是一个特殊的标记接口,它表示对象需要提供给一个ResourceLoader引用: public interface ResourceLoaderAware { ...

  2. 如何把va_list可变参数传送到下一级函数中(如传送到printf)

    最近我在一个LCD上想实现打印格式化字符串的功能,实现这样的功能可有两种方式: 一 最直接的就是自己去解析类似于printf功能的一个函数: 二 比较简单的方法是使用已有的sprintf功能,把格式化 ...

  3. 单极型ADC如何测量负电压?

    最常用的方法是使用一个运放做成加法器将负电压抬到0V以上,如果这样的输出超过了最大输出电压那么再使用比例衰减就可以办到了. 参考下面的讨论: http://www.amobbs.com/thread- ...

  4. 牛腩公布系统--HTTP 错误 403.14 - Forbidden

    忘了是谁说的"至理名言",做牛腩公布系统,不怕出错误,就怕出跟牛老师不一样的错误!! 刚做就開始出现各种错误了,只是话说错误越多,收获越多.把每次困难都当做历练成长的机会.不多说, ...

  5. js 图片点击放大功能

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 使用Castle扩展Ibatis.Net,面向接口编程-更优雅的代码

    使用Ibatis.Net做项目半年了,甚是喜欢,感觉确实是个简单.轻巧的O/R Mapping框架,特别是将Sql配置在Xml文件中,相当于直接将Dao层抽离了出来. 本文假定读者对Ibatis.Ne ...

  7. java中的输入流(Scanner),数据类型,运算符,switch,数组的用法

    //java中创建包用package相当于C#的命名空间namespace,java中导入包用import相当于C#中引入命名空间usingimport java.util.*;//导入包,*代表导入 ...

  8. 动动手,写个knockout的分页模板

    最近一个项目用ASP.NET + knockout开发,很多列表页面都带分页,于是就有了写一个公共的分页模板的想法. 先把template写好: <script type="text/ ...

  9. boost------signals2的使用2(Boost程序库完全开发指南)读书笔记

    1.应用于观察者模式 本小节将使用signals2开发一个完整的观察者模式示例程序,用来演示信号/插槽的用法.这个程序将模拟一个日常生活场景:客人按门铃,门铃响,护士开门,婴儿哭闹. Ring.h: ...

  10. thrift之TTransport层的内存缓存传输类TMemoryBuffer

    内存缓存是简单的在内存进行读写操作的一种传输,任何时候想在上面写入数据都是放入缓存中,任何时候读操作数据也是来至于缓存.内存缓存的分配使用c语言的malloc类函数,分配的长度是需要长度的两倍,需要考 ...