(文章也有問題,請自行跳過)react中的狀態機每次setState都是重新創建新的對象,如需取值,應該在render中處理。


demo如下

class Demo4StateLearn extends React.Component { constructor(props) { super(props); this.state = { a:11 }; this.a = this.state.a;//在創建該組件的時候就設置 this.a = 狀態機.a } loadData(e) {//每次輸入改變狀態機 const value = e.target.value; this.setState({a:value}); } render() { return ( <div> <input type="text" onChange={(e)=>{this.loadData(e)}}/> <div>this.state.a:{this.state.a}</div> <div>this.a:{this.a}</div> </div> ) } }

網頁效果如下圖:

所以我們在基於React開發的時候,應該避免使用這種開發方式;而常見的使用方式更多的是如下:

render() { const a = this.state.a;//在render函數中在取值,這樣就可以避免以上問題;因為每次setState都會觸發render的重新執行;所以也就重新指向了新的地址; return ( <div style={{margin:"20px"}}> <input type="text" onChange={(e)=>{this.loadData(e)}}/> <div>this.state.a:{this.state.a}</div> <div>this.a:{this.a}</div> </div> ) }

本來是應該去查看REACT的源碼的,但礙於目前尚無讀其源碼的能力,所以只能在此依據現象進行推導; 如不正確,望斧正;

----------------------------2018,1,22-----勘誤-----------------------

再次讀此文,真是一派胡言;

上面之所以不會變,是因為this.a賦值為一個 基本數據類型  當然不會跟着state的改變而改變!

希望下次寫博客自己可以強大些,不要誤人子弟,也對自己沒有任何幫助


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM