一.React什么算法,什么虚拟DOM,什么核心内容网上一大堆,请自行google。

但是能把算法说清楚,虚拟DOM说清楚的聊聊无几。对开发又没卵用,还不如来点干货看看咋用。

二.结构如下:

import reqwest from 'reqwest';
import React from 'react';
import ReactDOM from 'react-dom'; var Header = React.createClass({
handleClick:function(){
console.log(this.refs.head);
console.log(ReactDOM.findDOMNode(this.refs.head));
},
render:function(){
return (
<div style={{ backgroundColor:'blue' }} onClick={ this.handleClick } ref='head'>
<p>Header组件</p>
</div>
)
}
}) var ComponentDemo = React.createClass({
//默认state
getInitialState() {
return {
current: 1,
openKeys: [],
result_data : {}
};
},
//默认props
getDefaultProps() {
return {
key:{
value:2
}
};
},
//静态方法 调用 ComponentDemo. getBusinessName()
statics:{
getBusinessName:function(){
return console.log('getBusinessName方法被调用。。。')
}
},
handleClick(e) {
console.log('div被点击。。。');
console.log(this.refs.cct);
console.log(ReactDOM.findDOMNode(this.refs.cct))
},
componentDidMount: function() { //异步请求
reqwest({
url: 'http://localhost:90/menu',
method: 'get',
type: 'json'
}).then(result => {
if(this.isMounted()){
this.setState({
result_data : result.data
});
} },function(err, msg){
console.log(err)
console.log(msg)
}); //使用props
console.log(this.props.key.value) },
componentWillReceiveProps(nextProps) {
//接受新的props时候被触发
},
render() { return (
<div>
<Header ref='cct'/>
<div style={{ height:'100%',width:200 }} className='btn' onClick={ this.handleClick }>CCT部分</div>
</div>
);
}
}) ReactDOM.render(<ComponentDemo />,
document.getElementById('contain'));

这个例子中涉及了开发中常用的几个知识点。

1.improt 这样的引入方式是es6的语法 ,也可require

2.Header是个组件,组件的创建使用React.createClass({}),es6也还有别的写法,反正我是用不惯

3.每个组件都需要一个render函数,return中只能包含一个顶层标签,我们一般用div来包裹。且组件名称应该大写开头。

4.refs的属性可以帮助我们突破虚拟DOM的限制,可以获取到DOM结构,但是不要使用中文网上的类似:this.refs.xxx.getDOMNode(),因为这样的写法已经不被支持。

this.refs.XXX的写法是用来获取react结构的。

我们应该使用react-dom提供的专门操作DOM的方法:ReactDOM.findDOMNode(this.refs.XXX)。

this.refs.XXX与ReactDOM.findDOMNode(this.refs.XXX)是不同的,虽然有时候我们打印出来的有时会相同。

5.当然,react最核心的就是一个状态机。getInitialState(只会在组件初始化的时候调用一次)就是用来初始化状态的,我们可以通过this.setState()来修改状态。状态的每次修改都会出发render函数。

6.getDefaultProps这个函数可以帮助我们设置一个不变的数据结构,以便取用。相当于定义了一个常量。

7.statics就是用来顶一个静态方法的,我们可以定义各种函数,并通过ComponentDemo. getBusinessName()方式来调用。结构:组件名.函数名

8.最重要的事件机制也是存在的,就像例子中的onClick,大部门事件机制都是支持的。

9.componentDidMount(只会在组件渲染结束后调用一次)这个函数就是跟组件的生命周期相关了。我们一般在里面会进行异步的请求之类的操作。

componentWillMount(只会在组件执行初始化渲染之前调用一次)刚好跟上面的相反。

还有其他的几个,个人理解为组件进入,开始,离开的钩子。

shouldComponentUpdate(object nextProps,boject nextState) (在函数有新的props或state的时候触发)这个钩子会主要管理组件是否更新的,返回的是个布尔值。默认是true,一般不建议使用。

10.组件肯定也少不了css的润色。但是这里添加style必须以对象的形式写,如果是数字的话,默认单位是px。

其他的属性必须用驼峰格式:style={{ backgroundColor:'red' }};

class必须写成className。

11.isMounted()是用来判断组件是否已经插入DOM。一般请求后强烈建议在判断是否插入DOM后,再来修改state。

绝对不要直接改变 this.state,因为在之后调用 setState() 可能会替换掉你做的更改。把 this.state 当做不可变的。

setState() 不会立刻改变 this.state,而是创建一个即将处理的 state 转变。在调用该方法之后获取 this.state 的值可能会得到现有的值,而不是最新设置的值。

不保证 setState() 调用的同步性,为了提升性能,可能会批量执行 state 转变和 DOM 渲染。

setState() 将总是触发一次重绘,除非在 shouldComponentUpdate() 中实现了条件渲染逻辑。如果使用可变的对象,但是又不能在 shouldComponentUpdate() 中实现这种逻辑,仅在新 state 和之前的 state 存在差异的时候调用 setState() 可以避免不必要的重新渲染。

以上仅属于个人愚见,如果错处,欢迎指出!

React在开发中的常用结构以及功能详解的更多相关文章

  1. 在ASP.NET 5应用程序中的跨域请求功能详解

    在ASP.NET 5应用程序中的跨域请求功能详解 浏览器安全阻止了一个网页中向另外一个域提交请求,这个限制叫做同域策咯(same-origin policy),这组织了一个恶意网站从另外一个网站读取敏 ...

  2. 【重构】AndroidStudio中代码重构菜单Refactor功能详解

    代码重构几乎是每个程序员在软件开发中必须要不断去做的事情,以此来不断提高代码的质量.Android Stido(以下简称AS)以其强大的功能,成为当下Android开发工程师最受欢迎的开发工具,也是A ...

  3. Spring常用jar包功能详解

    很多小伙伴包括我自己,在使用spring的时候导入了一堆jar包,但是并不明白每个jar的用途,使用spring的不同功能时也不知该导入哪个jar包,今天记录一下spring各个jar包的含义,供大家 ...

  4. Java——Spring常用jar包功能详解

    很多小伙伴包括我自己,在使用spring的时候导入了一堆jar包,但是并不明白每个jar的用途,使用spring的不同功能时也不知该导入哪个jar包,今天记录一下spring各个jar包的含义,供大家 ...

  5. Python中pandas透视表pivot_table功能详解(非常简单易懂)

    一文看懂pandas的透视表pivot_table 一.概述 1.1 什么是透视表? 透视表是一种可以对数据动态排布并且分类汇总的表格格式.或许大多数人都在Excel使用过数据透视表,也体会到它的强大 ...

  6. TableView 常用技巧与功能详解

    分割线顶格iOS8 UITableview分割线顶格的做法 //iOS8 Cell分割线顶格 if ([_tableView respondsToSelector:@selector(setSepar ...

  7. Windows开发中一些常用的辅助工具

    经常有人问如何快速的定位和解决问题,很多时候答案就是借助工具, 记录个人Windows开发中个人常用的一些辅助工具.   (1) Spy++ 相信windows开发中应该没人不知道这个工具, 我们常用 ...

  8. react + antiDesign开发中遇到的问题记录

    react + antiDesign开发中遇到的问题记录 一:页面中子路由失效: antiDesign的官方实例中,会把路由重复的地方给去重,而且路由匹配模式不是严格模式.所以我们需要在util.js ...

  9. React Native开发中自动打包脚本

    React Native开发中自动打包脚本 在日常的RN开发中,我们避免不了需要将我们编写的代码编译成安装包,然后生成二维码,供需要测试的人员扫描下载.但是对于非原生的开发人员来说,可能不知如何使用X ...

随机推荐

  1. 旺财速啃H5框架之Bootstrap(五)

    在上一篇<<旺财速啃H5框架之Bootstrap(四)>>做了基本的框架,<<旺财速啃H5框架之Bootstrap(二)>>篇里也大体认识了bootst ...

  2. SQL Server2014 SP2新增的数据库克隆功能

    SQL Server2014 SP2新增的数据库克隆功能 创建测试库 --创建测试数据库 create database testtest use testtest go --创建表 )) --插入数 ...

  3. 一次修改闭源 Entity Provider 程序集以兼容新 EntityFramework 的过程

    读完本文你会知道,如何在没有源码的情况下,直接修改一个 DLL 以去除 DLL 上的强命名限制,并在该程序集上直接添加你的“友元程序集(一种特殊的 Attribute,将它应用在程序集上,使得程序集内 ...

  4. C语言 · Torry的困惑(基本型)

    问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7--这样的数叫做质数.Torry突然想到一个问题,前10.100.1000.10000--个质数的乘积是多少呢?他把这个问题告诉老师 ...

  5. ASP.NET MVC5+EF6+EasyUI 后台管理系统(73)-微信公众平台开发-消息管理

    系列目录 前言 回顾上一节,我们熟悉的了解了消息的请求和响应,这一节我们来建立数据库的表,表的设计蛮复杂 你也可以按自己所分析的情形结构来建表 必须非常熟悉表的结果才能运用这张表,这表表的情形涵盖比较 ...

  6. 记录我这一年的技术之路(nodejs纯干货)

    2015年12月28日23:19:54 更新koa应用.学习型网站和开发者工具等 coding伊始 开始认认真真的学习技术还是2015.10.21日开始的,记得很清楚,那天,是我在龙湖正式学习的第一天 ...

  7. C++随笔:.NET CoreCLR之corleCLR核心探索之coreconsole(1)

    一看这个标题,是不去取名有点绕呢?或者是,还有些问题?报告LZ...你的标题取得有问题,是个病句!↖(^ω^)↗!!!先不要急,其实我今天带给大家的就是CoreCLR中的coreclr.其中它是在名字 ...

  8. [干货来袭]C#6.0新特性

    微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下也是昨天发布的新的C#6.0的部分新特性吧.. ...

  9. NPM如何更新到最新版

    参考文章--npm更新到最新版本的方法 其实我们可以这样,随便新建一个文件夹例如:F:\test.按着"shift"键,右键该文件夹,选择"在此处打开命令窗口(W)&qu ...

  10. 设置Hyper-V和VMware多个服务之间共存

    这个方法是解决多个服务之间不能共存,下面相当于是以Hyper-V和VMware做例子,其他的也适用. 今天准备安装VMware Workstation 10,然后玩玩MAC OS. 没想到,淡定的我双 ...