React组件-事件、状态和生命周期
生活随笔
收集整理的這篇文章主要介紹了
React组件-事件、状态和生命周期
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
組件狀態
事件 ?
(事件名大寫)
注意:組件事件需要配合狀態,所以現在無法呈現效果
class Cmp1 extends React.Component{constructor(...args){super(..args);this.a=0;//要用狀態,屬性不行,props也不行}add(){this.a++;//這個函數會執行,a也會變,但是不會重新渲染alert(this.a);}render(){return <div>//強制綁定add的this<input type="button" value="加1" onClick={this.add.bind(this)} /></div>} } 復制代碼a其實變了,但是只有狀態改變能引發重新渲染狀態
組件的狀態非常有用
- 屬性是只讀,狀態是可變的
- 狀態改變,組件會重新渲染(父級屬性變化,強制刷新也可以引起重新渲染)
- 引起組件重新渲染的條件
- state
- props
- 強制渲染. ? this.forceUpdate()
- 引起組件重新渲染的條件
注意??:
- 狀態的初始化只能放在constructor中完成
- 必須通過setState修改狀態,否則也不能重新渲染——其實是setState在調用render
props變化引起的重新渲染
class Parent extends React.Component{constructor(...args){super(...args);this.state={a:0}}render(){return <div><input type="button" value="+1" onClick={function(){this.setState({a:this.state.a+1})}.bind(this)} /><Child a={this.state.a} /></div>} } class Child extends React.Component{constructor(...args){super(...args);}render(){return <div>{this.props.a}</div>} } 復制代碼強制渲染(forceUpdate)
class Cmp1 extends React.Component{constructor(.;..args){super(...args);this.a=12;}fn(){this.a++//強制渲染this.forceUpdate(); }render(){return <div><input type="button" value="+1" onClick={this.fn.bind(this)} />{this.a}</div>} } 復制代碼強制重新渲染會打亂React自身的渲染計劃,輕則影響性能,重則引發錯誤,極少使用組件生存周期
從組件創建到銷毀的整個過程
完整的生命周期鉤子函數
創建階段(mount)
更新階段(update)
阻止更新
shouldComponentUpdata(nextProps,nextState){ //當前狀態(變化前),新狀態(變化后)this.state.nextState//當前屬性,新屬性this.props.nextPropsreturn true -允許更新/。 false -拒絕更新 }復制代碼使用實例:阻止循環update
class Parent entends React.Component{constructor(...args){super(..args);this.state={id:1}}next(){this.setState{id:this.state.id+1}}render(){return {<div><input type="button" value="下一個" onClick={this.next.bind(this)}/><Child id={this.state.id}/></div>}} } class Child extends React.Component{constructor(..args){super(...args);this.state={name:'',age:''}}shouledComponentUpdata(nextProps,nextState){//console.log(nextProps,this.props);renturn{//條件1:屬性變了(來自父級)nextProps.id!=this.props.id||//條件2:狀態變了(來自自己)nextState.name!=this.state.name};}loadData(id){fetch(`data/data${id}.txt`).then(res=>{res.json().then(data=>{this.setState(data);});});}componentDidMount(){console.log('初始:‘,this.props.id);this.loadData(this.props.id)}componentDidUpdate(){console.log('更新‘,this.props.id)this.loadData(this.props.id);}render(){console.log('渲染‘);return (<div>ID:{this.props.id}<br/>用戶名:{this.state.name},年齡:{this.state.age}</div>)} }復制代碼銷毀階段(Unmount)
- componentWillUnmount:組織已銷毀
轉載于:https://juejin.im/post/5cee854a518825155a23237d
總結
以上是生活随笔為你收集整理的React组件-事件、状态和生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《团队作业》五小福团队--UNO的博客链
- 下一篇: 写在 2019 年后的蚂蚁、头条、拼多多