参考资料:
React:组件的生命周期
这个文档利用es5的creatClass,有些陈旧。须要研究二者差异的, 移步
React 生命周期
这个过于粗暴,没有示例
render()
react最重要的步骤,建立虚拟dom,进行diff算法,更新dom树都在此进行。此时就不能更改state了。
只能经过 this.props 和 this.state 访问数据(不能修改),也就是不能调用this.setState()。
只能出现一个顶级组件,不能返回一组元素。例如:html
render(){ //这样不行 this.setState({ newState:_newState }); return ( <div></div> //去掉下面一行 <div></div> ); }
import React,{Component} from 'react'; import ReactDOM from 'react-dom'; class Clock extends Component{ constructor(props){ super(props); this.state = { date:new Date() } } //渲染前render执行 componentWillMount(){ //this.timer/////////////////////////// this.timer =setInterval(()=>{ this.setState({ date: new Date() }) },1000) } componentDidMount(){ this.clock.focus(); } componentWillUnmount(){ clearInterval(this.timer) } render(){ return( <div> <h1> <p ref={(clock)=>this.clock=clock}>now time:</p> {this.state.date.toLocaleTimeString()} </h1> </div> ) } } ReactDOM.render(<Clock />, document.getElementById('root'));
import React from 'react'; import ReactDOM from 'react-dom'; class Content extends React.Component { constructor(){ super(); this.state = { test:0 } } componentWillMount() { console.log('Component WILL MOUNT!') } componentDidMount() { console.log('Component DID MOUNT!') } componentWillReceiveProps(newProps) { console.log(newProps) console.log('Component WILL RECEIVE PROPS!') } shouldComponentUpdate(newProps, newState) { console.log(newProps,newState) return true; } componentWillUpdate(nextProps, nextState) { console.log(nextProps,nextState) console.log('Component WILL UPDATE!'); } componentDidUpdate(prevProps, prevState) { console.log(prevProps,prevState) console.log('Component DID UPDATE!') } componentWillUnmount() { console.log('Component WILL UNMOUNT!') } _handleClick(){ this.setState({ test:this.state.test + 1 }) } render() { return ( <div> <h3>{this.props.myNumber}</h3> <label onClick={this._handleClick.bind(this)}>点我</label> <span>{this.state.test}</span> </div> ); } } class Button extends React.Component { constructor(props) { super(props); this.state = {data: 0}; this.setNewNumber = this.setNewNumber.bind(this); } setNewNumber() { this.setState({data: this.state.data + 1}) } render() { return ( <div> <button onClick = {this.setNewNumber}>INCREMENT</button> <Content myNumber = {this.state.data}></Content> </div> ); } } ReactDOM.render(<Button />, document.getElementById('root'));