一.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. dotNET跨平台相关文档整理

    一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在M ...

  2. PowerDesigner-VBSrcipt-自动设置主键,外键名等(SQL Server)

    在PowerDesigner中的设计SQL Server 数据表时,要求通过vbScript脚本实现下面的功能: 主键:pk_TableName 外键:fk_TableName_ForeignKeyC ...

  3. 深入理解BFC

    定义 在解释BFC之前,先说一下文档流.我们常说的文档流其实分为定位流.浮动流和普通流三种.而普通流其实就是指BFC中的FC.FC是formatting context的首字母缩写,直译过来是格式化上 ...

  4. MVC常遇见的几个场景代码分享

    本次主要分享几个场景的处理代码,有更好处理方式多多交流,相互促进进步:代码由来主要是这几天使用前端Ace框架做后台管理系统,这Ace是H5框架里面的控件效果挺多的,做兼容也很好,有点遗憾是控件效果基本 ...

  5. 港真,到底应该选择OA还是BPM?

    越来越多企业意识到流程管理的重要性,但是,选择OA还是BPM,却让他们产生了选择困难症. 一方面,企业皆注重流程的高效运转,最好内外部的业务都能用一个系统来解决.所有流程一天就能上线什么的,那就更好啦 ...

  6. Angular2 Hello World 之 2.0.0-beta.14

    公司现在采用angualrjs开发一些web应用,采用的是angular1,现在angular2已经差不多了,听说最近rc6已经出来了……其实感觉好慢啊!之前也做过一些anglar2的例子,但是没有记 ...

  7. IIS8 使用FastCGI配置PHP环境支持 过程详解

    平时帮朋友们配置过一些PHP环境的服务器,但是一直使用的都是Apache HTTP+PHP,今天呢,我吧IIS+PHP配置方式给大家发一下下~呵呵. 在这里,我使用的是FastCGI模块映射的方式配置 ...

  8. sqlserver批量修改首字母为大写

    'hello world'  ---->   'Hello world' update tableName set columnName=CHAR(ASCII(SUBSTRING(columnN ...

  9. 【python之路4】循环语句之while

    1.while 循环语句 #!/usr/bin/env python # -*- coding:utf-8 -*- import time bol = True while bol: print '1 ...

  10. 【腾讯Bugly干货分享】Android动态布局入门及NinePatchChunk解密

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57c7ff5d53bbcffd68c64411 作者:黄进——QQ音乐团队 摆脱 ...