Creation lifecycle:Can’t cause side effect
Constructor(props)getDerivedStateFromProps(props,state)render()Render Child Componentslife cycle finished: Can cause side effect
componentDidMount()新版本react:state可以不在contructor中
constructor(props){ super(props); //继承component的步骤 console.log('constructor'); } state={ persons:[ {id:'asfa1', name:'Max' , age:28}, {id:'asfa2', name:'manu' , age:24}, {id:'asfa3', name:'Snie' , age:26} ], isshow:false };不可调用side effect
getDerivedStateFromProps(props,state)shouldComponentUpdate(nextProps,nextSteps)render()update child component propsgetSnapshowBeforeUpdate(prevProps,prevStates)可调用side effect 6. componentDidUpdate()
class Persons extends Component{ // static getDerivedStateFromProps(props,state){ // console.log('[Persons.js] getDerivedStateFromProps run'); // return state; // } //不建议使用 // componentWillReceiveProps(props){ // }; // componentWillUpdate(props){ // }; shouldComponentUpdate(nextProps,nextState){ console.log('[Persons.js] shouldComponentUpdate'); return true; } getSnapshotBeforeUpdate(prevProps,prevState){ console.log('[Persons.js] getSnapshowBeforeUpdate'); return {message:'snapshot!'}; } //然后render componentDidUpdate(prevProps,prevStates,snapshot){ console.log('[Persons.js] componentDidUpdate'); console.log(snapshot); } render(){ console.log('persons rendering...'); return this.props.persons.map((person,index)=>{ return ( <Person name={person.name} age={person.age} click={()=>this.props.clicked(index)} key={person.id} changed={(event)=>this.props.changed(event,person.id)} /> ) }) }} ;