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 =
;ReactDOM.render(myDivElement, document.getElementById('example'));
要渲染 React 组件,只需创建一个大写字母开头的本地变量。
var MyComponent = React.createClass({/*...*/});
var myElement =
ReactDOM.render(myElement, document.getElementById('example'));
React 的 JSX 使用大、小写的约定来区分本地组件的类和 HTML 标签
复合组件
我们可以通过创建多个组件来合成一个组件,即把组件的不同功能点进行分离