react的新手基础知识笔记

 1 <!DOCTYPE html>
 2 <html>
 3   <head>
 4     <script src="../build/react.js"></script>
 5     <script src="../build/react-dom.js"></script>
 6     <script src="../build/browser.min.js"></script>
 7   </head>
 8   <body>
 9     <div id="example"></div>
10     <script type="text/babel">
11       // ** Our code goes here! **
12     </script>
13   </body>
14 </html>

script的标签的type="text/babel"React独有的JSX的语法跟javascript不兼容

三个库文件必须首先加载react.js(核心库),react-dom.js是提供与DOM相关的功能,browser.js的作用的是将JSX语法转为
Javascript的语法

二、最基本的用法ReactDOM.render()

1 ReactDOM.render(
2 <h1>hello world!!</h1>,
3 document.getElementById("example")
4 );

三、JSX语法

JSX的基本语法规则,遇到HTML标签(以<开头)用html规则解析
遇到代码块(以{开头)用javascript规则解析

四、组件component
React.createClass方法用于生成一个组件类

1 var Hello = React.createClass({
2 render: function(){
3 return <h1>hello {this.props.name}</h1>
4 }
5 });
6 ReactDOM.render(
7 <Hello name="hai"/>
8 document.getElementById()
9 );

注意:组件类的第一个字母必须大写,否则会报错,组件类只能包含一个顶层标签否则也会报错

组件的属性可以在组件类的this.props对象上获取

添加组件属性 class属性要写成className for写成hrmlfor (因为for class是javascipt的保留字)

五、this.props.children

getDefaultProps() 方法为 props 设置默认值

this.props的对象属性与组件的属性一一对应 只有一个例外this.props.children它表示组件的所有子节点

this.props.children的值有三种可能
1.如果当前组件木有子节点undefined
2.如果有一个子节点数据类型是object
3.多个子节点的数据类型就是array所以处理this.props.children的时候要小小

六、PropTypes

组件类的PropTypes属性用来验证组件实例的属性是否符合要求

七、获取真是的DOM节点

组件并不是真是的DOM节点,而是存在与内存之中的一种数据结构叫做虚拟DOM

只有当它插入文档以后才会变成真是的dom

react的设计是先修改虚拟的dom在实际发生变化的部分,反映在真是的dom上这种算法叫做DOM diff 可以极大提高网页的性能

表现

从组件获取真实 DOM 的节点,这时就要用到 ref 属性

八、this.state
组件免不了用户互动 react的组件看成一个状态机 ,一开始有一个初始状态,然后用户互动,导致状态变化,从而触发重新

渲染

getInitialState方法用于定义初始状态也就是一个对象,这个对象可以通过 this.state 属性读取。当用户点击组件,导致

状态变化,this.setState 方法就修改状态值,每次修改以后,自动调用 this.render 方法,再次渲染组件。
由于 this.props 和 this.state 都用于描述组件的特性,可能会产生混淆。一个简单的区分方法是,this.props 表示那些

一旦定义,就不再改变的特性,而 this.state 是会随着用户互动而产生变化的特性。

state 和 props 主要的区别在于 props 是不可变的,而 state 可以根据与用户交互来改变。这就是为什么有些容器组件需要定义 state 来更新和修改数据。 而子组件只能通过 state 来传递数据

十一、组件的生命周期

生命周期的三个状态Mounting:已插入真是DOM Updating:正在被重新渲染 Unmounting:已移出真是DOM

React为每个状态提供了两种处理函数 will函数在进入状态之前调用 did函数在进入状态之后调用

三种状态共计五种处理函数

componentWillMount()进入状态之前插入真实DOM
componentDidMount()进入状态之后插入真实DOM

componentWillUpdate(object nextProps,object nextState)

componentDidUpdate(object nextProps,object nextState)

componentWillUnmount()

此外两种特殊状态的处理函数

componentWillReceiveProps(object nextProps):已加载组件收到新的参数时调用

shouldComponentUpdate(object nextProps, object nextState):组件判断是否重新渲染时调用

十一、Ajax

组件的数据来源,通常是通过 Ajax 请求从服务器获取,可以使用 componentDidMount 方法设置 Ajax 请求,等到请求成功

,再用 this.setState 方法重新渲染 UI

jsx的优点
jsx执行更快(它在编译为javascript代码后进行了优化)、它的类型安全的,在编译过程中就能发现错误、使用jsx编写模板更加简单快速

可以在 JSX 中使用 JavaScript 表达式。表达式写在花括号 {} 中

JSX 中不能使用 if else 语句,单可以使用 conditional (三元运算) 表达式来替代。以下实例中如果变量 i 等于 1 浏览

器将输出 true, 如果修改 i 的值,则会输出 false

React 推荐使用内联样式。我们可以使用 camelCase 语法来设置内联样式. React 会在指定元素数字后自动添加 px

注释需要写在花括号中

数组

JSX 允许在模板中插入数组,数组会自动展开所有成员

React 可以渲染 HTML 标签 (strings) 或 React 组件 (classes)。

要渲染 HTML 标签,只需在 JSX 里使用小写字母的标签名。

var myDivElement = <div className="foo" />;
ReactDOM.render(myDivElement, document.getElementById(‘example‘));

要渲染 React 组件,只需创建一个大写字母开头的本地变量。
var MyComponent = React.createClass({/*...*/});
var myElement = <MyComponent someProperty={true} />;
ReactDOM.render(myElement, document.getElementById(‘example‘));

React 的 JSX 使用大、小写的约定来区分本地组件的类和 HTML 标签

复合组件

我们可以通过创建多个组件来合成一个组件,即把组件的不同功能点进行分离

时间: 2024-08-07 17:01:52

react的新手基础知识笔记的相关文章

React Native 入门基础知识总结

中秋在家闲得无事,想着做点啥,后来想想,为啥不学学 react native.在学习 React Native 时, 需要对前端(HTML,CSS,JavaScript)知识有所了解.对于JS,可以看看阮一峰老师的<ECMAScript 6 入门>这篇文章.里面涉及很多 ES6 的新特性.我之前也是看了阮老师的文章做了一些学习笔记 ES6 学习笔记. 1.环境搭建 环境搭建中文教程,点击跳转RN中文社区 :http://reactnative.cn/docs/0.40/getting-star

原生ajax基础知识笔记

原生ajax基础知识笔记 1.创建 XMLHttpRequest 对象 所有现代浏览器(IE7+.Firefox.Chrome.Safari 以及 Opera)均内建 XMLHttpRequest 对象. 老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveXObject. 代码示例: // Creates a XMLHttpRequest object. var xhr = new XMLHttpRequest(); 兼容浏览器代码示例: var xhr; /

网络连接相关基础知识笔记

一.常说的TCP/IP的含义 TCP/IP协议簇并不仅仅指TCP协议和IP协议,实际它包括了一系列协议组成的集合,如:TCP,IP,UDP,FTP,SMTP,DNS,ARP,PPP等 TCP与UDP协议都属于传输层协议,但有很大不同,TCP是面向连接的协议,提供的是可靠的数据流服务,TCP采用"带重传的肯定确认"机制来实现传输的可靠性,实现了一种"虚电路",因为从物理上来说,并不是真正在两台主机间建立了连接,这种连接只是存在于逻辑上的.最大的开销出现在通信前建立连接

Oracle基础知识笔记(10) 约束

大清早打开vs2008,出现这么诡异的错, 删了一个dll的就好了.如图 Oracle基础知识笔记(10) 约束

Oracle基础知识笔记(11) 建表、更新、查询综合练习

有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter(运动员编号sporterid,运动员姓名name,运动员性别sex,所属系号department) 项目item(项目编号itemid,项目名称itemname,项目比赛地点location) 成绩grade(运动员编号id,项目编号itemid,积分mark) 请用SQL语句完成如下功能: 1.  建表,并在相应字段上增加约束: 定义各个表的主键和外键约束: 运动员的姓名和所属系别不能为空: 积分要第为空值,要么为6,4

unity基础知识笔记一(快捷方式、基础概念)

快捷方式: 飞行模式,可以用alt+wasd ,切换,实现用户以第一视角在场景漫游 alt+鼠标左键:围着关注点旋绕 :切换天空盒.雾效,光晕的显示与隐藏. ctrl+6:可以弹出animation视图 基础概念: Mesh Filter:网格过滤器用于从对象中获取网格信息(Mesh)并将其传递到用于将其渲染至屏幕的网格渲染器当中 Mesh Collider:Mesh碰撞体,为了防止物体被穿透,需要给对象添加碰撞体 Mesh Renderer:网格渲染器从网格过滤器获得几何形状,并且根据Tran

初学MySQL基础知识笔记--第一天

本人初入博客园,第一次写博客,在今后的时间里会一点点的提高自己博客的水平,以及博客的排版等. 在今天,我学习了一下MySQL数据库的基本知识,相信关于MySQL的资料网上会有很多,所以我就不在这里复制粘贴了,在这里留下一些本人在初学MySQL时的一些笔记,以供有需要的同学来参考.以下内容绝无复制,仅仅是博主自己的一些总结. 字段类型 数字:int,decimal(小数) eg:decimal(5,2):一共包含5位数,小数部分有2位 字符:char(存的字符是固定的),varchar(存的字符是

计算机网络基础知识笔记(三)

无分类编址CIDR(Classless Inter-Domain Routing,构造超网) 背景:在1992年因特网仍然面临三个必须尽早解决的问题,这就是:B类地址在1992年已分配了近一半,眼看就要在1994年3月全部分配完毕!因特网主干网上的路由表中的项目数急剧增长(从几千个增长到几万个). 整个 IPv4 的地址空间最终将全部耗尽. 1987年,RFC1009就指明了在一个划分子网的网络中可同时使用几个不同的子网掩码.使用变长子网掩码VLSM(Variable Length Subnet

存储基础知识笔记

DAS.NAS.SAN是三种存储模式,NAS与SAN都是在DAS的基础上发展起来的,是新型数据存储模式中的两个主要发展方向. DAS是大型服务器采用的主要存储方式,DAS(Direct Attached Storage,直接外挂存储) NAS(Network Attached Storage,网络附加存储) SAN(Storage Area Network,存储域网络) 直接连接存储(Direct Attached Storage,简称DAS),是通常放置在服务器机箱内部的驱动器,通常是SCSI