react:优点
虚拟DOM,解决了跨浏览器问题,IE8都没问题,模块化重用性高,可维护性高
可以在服务器上预渲染应用再发送到客户端,有助于搜索引擎优化。
缺点:
注重ui组件,可以和其他框架组合使用,不适合单独做一个完整框架,自带的插件少,一般都得用第三方插件。
jsx
jsx: 是一个javascript的语法扩展,html和js的一种结合,支持所有js语法
元素渲染:
react元素是不可变对象一旦被创建,就无法更改它的子元素或者属性。将一个 React 元素渲染到DOM 节点中,
只需把它们一起传入 ReactDOM.render()。React DOM 会将元素和它的子元素与它们之前的状态进行比较,改变必要更新
组件:
组件定义:
纯函数式定义的无状态组件
React.createClass 定义的组件
Extends React.Component 定义的组件
class组件:类组件------
- 使用class继承React.Component
- constructor需要接收props并且调用super(props),在调用super之后,可以直接设置state。
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
函数组件 :无状态展示组件 ----
组件不会被实例化,整体渲染性能得到提升,不能访问this对象,生命周期的方法,只能访问输入的props无副作用
function Title(props) {
return <h1>Hello, {props.name}</h1>;
}
React.createClass 定义的组件 : -----
- 调用React.createClass并传入一个对象
- 接受一个只会在组件被挂载时才会调用一次的initialState函数来改变state,
var Root = React.createClass({
render:function(){
return (
<h1>迹忆博客</h1>
);
},
});
生命周期
constructor():用来做一些组件的初始化工作,如定义this.state的初始内容
componentWillMount():在组件挂载到DOM前调用,且只会被调用一次在这边调用this.setState不会引起组件重新渲染
componentWillUpdate():调用render方法前执行,在这边可执行一些组件更新发生前的工作
render():是纯函数,负责组件渲染工作
componentDidMount(): 方法会在组件已经被渲染到 DOM 中后运行
shouldComponentUpdate(nextProps, nextState):此方法通过比较nextProps,nextState及当前组件的this.props,this.state,
返回布尔值,可控制组件是否重新渲染,优化组件
componentWillReceiveProps(nextProps):判断props是否变化了,将props转换成自己的state,调用 this.setState()
将不会引起第二次渲染。
componentWillUnmount():卸载组件前调用,可以在这里执行一些清理工作
componentDidUpdate() 这个生命周期的作用是当props或state更新之后,使用它更新DOM节点。
getSnapshotBeforeUpdate() 被调用于render之后,可以读取但无法使用DOM的时候。它使您的组件可以在可能更改之前从DOM
捕获一些信息(例如滚动位置)。此生命周期返回的任何值都将作为参数传递给componentDidUpdate()。