建立好拥有各自 state(状态) 的组件,再将其组合构成更加复杂的UI界面。react
函数组件:函数组件也称为无状态组件,使用纯函数建立,建立后不会产生组件实例,也就是说没法使用ref获取,主要用于展现组件的开发,性能高,没有生命周期,没有state,可是能够接收props,至关于一个只有render生命周期的组件es6
function Component (props) { return <div>{props.children}</div> } //使用 <Component>组件</Component>
class类组件:使用es6 class的方式建立,经过继承React.component实现,能够有本身独立的生命周期,state状态,必须有render生命周期,state定义在constructor构造函数中,所用的容器组件都是经过class建立数组
class Component extends React.component { constructor (props) { super(props) this.state = { age: 100 } } render () { const {age} = this.state return <div>{age}</div> } } //使用 <Component />
createClass组件:不经常使用浏览器
在react中最小的单位是元素,元素分为dom元素,组件元素,区分方法是dom元素小写,组件元素首字母大写
在react中组件的状态使用state定义,使用setState修改,使用this.state读取
setState执行原理:setState方法经过一个队列机制实现state更新,当执行setState的时候,会将须要更新的state合并以后放入状态队列,而不会当即更新this.state(能够和浏览器的事件队列类比)。dom
componentDidMount() { SynapseAnalytics.init({ type:Enum.pageTypeEnum.otherPage }); this.setState({ val:this.state.val + 1 }); //第一次输出 0 console.log(this.state.val); this.setState({ val:this.state.val + 1 }); //第二次输出 0 console.log(this.state.val); setTimeout(()=>{ this.setState({val:this.state.val + 1}); //第三次输出 2 console.log(this.state.val); this.setState({ val:this.state.val + 1 }); //第四次输出 3 console.log(this.state.val); }, 0); }
在componentWillUpdate、render、componentDidUpdate生命周期中不能够调用setState。由于会形成循环调用,使得浏览器内存占满后崩溃函数
调用setState后发生了什么?
setState合并机制组件化
setState更新机制
react性能
react如何操做dom
使用ref能够获取dom
使用react-dom,react-dom是react提供专门用于操做dom的模块,主要就是findDOMNode, render
事件处理函数中的event对象的target属性
在函数组件不能使用findDOMNode获取组件对应的根节点
在函数组件内部使用ref获取dom,可是ref不能做用在函数组件上获取组件实例this