本文章主要是总结了一些react的基础知识和API, 这里借鉴了一些其余文章的内容,旨在大概的了解一下react的基础知识。读这篇文章以前,肯定你已经对react有了初步认识。html
react的核心思想有两点:react
声明式渲染 (Declarative)webpack
基于组件 (Component-Based))web
react渲染流程大致以下:算法
初始化的渲染流程分为 3 步。segmentfault
第一步,开发者使用 JSX 语法写 React,babel 会将 JSX 编译为浏览器能识别的 React JS 语法。这一步,通常配合 webpack等工具 在本地进行。浏览器
第二步,执行 ReactDOM.render 函数,渲染出虚拟DOM树。babel
第三步,react 将虚拟DOM,渲染成真实的DOM。网络
页面更新的流程一样也是 3 步。函数
第一步,当页面须要更新时,经过声明式的方法,调用 setState 告诉 react。
第二步,react 自动调用组件的 render 方法,渲染出虚拟 DOM。
第三步,react 会经过 diffing 算法,对比当前虚拟 DOM 和须要更新的虚拟 DOM 有什么区别。而后从新渲染区别部分的真实 DOM。
JSX 就是 用来声明 React 当中的元素, 最终将其渲染成真实的DOM。
JSX 只是为 React.createElement(component, props, ...children)
方法提供的语法糖。
例如:
jsx的书写方式:
<MyButton color="blue" shadowSize={2}> Click Me </MyButton>
会先编译为:
React.createElement( MyButton, {color: 'blue', shadowSize: 2}, 'Click Me' )
在react中定义组件有三种方式:函数定义 或者是 类定义组件,还能够经过React.createClass()
来定义组件
函数定义的方法:
function Web(props){ return <h1>hello,{props.name}</h1> }
类定义组件方法:
clas Web extends React.Component{ render(){ return <h1>hello,{props.name}</h1> } }
经过React.createClass()
来定义组件:
var Web = React.createClass({ render(){ return <h1>hello,{props.name}</h1> } })
组件定义好后咱们就能够直接渲染:
ReactDOM.render( Web, document.getElementById('root'); )
props是一种父级向子级传递数据的方式,子组件只能经过 props 来接收上级组件传递过来的数据。而且props是只读的,不管是使用函数或是类来声明一个组件,它决不能修改它本身的props。也就是react组件必须向纯函数那样使用它们的props。
// 像这种没有改变它本身的输入值,当传入的值相同时, // 老是会返回相同的结果。这样的函数被称为纯函数。 function fun(a,b){ return a + b; }
一个组件的显示形态能够由数据状态和外部参数所决定,外部参数也就是props,而数据状态就是State。State能够在不违反props只读状况下,根据用户操做、网络响应、或者其余状态变化,使组件动态的响应并改变组件的输出。
设置状态:setState(object nextState[, function callback])
替换状态:replaceState(object nextState[, function callback])
设置属性:setProps(object nextProps[, function callback])
替换属性:setProps(object nextProps[, function callback])
强制更新:forceUpdate([function callback])
获取DOM节点:findDOMNode()
判断组件挂载状态:isMounted()
生命周期的三个状态
Mounting
:已插入真实 DOM
Updating
:正在被从新渲染
Unmounting
:已移出真实 DOM
生命周期的方法
componentWillMount
在渲染前调用
componentDidMount
: 在第一次渲染后调用
componentWillReceiveProps
在组件接收到一个新的prop时被调用。这个方法在初始化render时不会被调用
shouldComponentUpdate
返回一个布尔值。在组件接收到新的props
或者state
时被调用。在初始化时或者使用forceUpdate
时不被调用。
componentWillUpdate
在组件接收到新的props
或者state但尚未render
时被调用。在初始化时不会被调用。
componentDidUpdate
在组件完成更新后当即调用。在初始化时不会被调用
componentWillUnmount
在组件从 DOM 中移除的时候马上被调用。
借鉴文章:https://reactjs.org/tutorial/tutorial.html
借鉴文章:http://www.runoob.com/react/react-refs.html
借鉴文章:http://www.javashuo.com/article/p-trubutjt-kp.html