5 - state & 生命周期

state (狀態(tài))

與 props (屬性) 相似,但 state 是私有的,只屬于當前組件。

1. 狀態(tài)的定義、使用與更新

class Hello extends React.Component {
  constructor (props) {
    super(props);

    // 定義狀態(tài)
    this.state = {
      name: 'hello'
    }
  }
  render () {
    // 通過 this.state 使用狀態(tài)
    return (
      <div>
        <h1>hello, { this.state.name }</h1>
        {/* 通過調用 this.setState 來修改狀態(tài) */}
        <button onClick={ () => { this.setState({ name: 'world' }) } }>修改name</button>
      </div>
    )
  }
}

上面代碼中,

  • 通過在 constructor 中設置 this.state 來定義狀態(tài)。
    并且 constructor 是唯一能夠初始化狀態(tài)的地方。
    constructor 必須使用 super() 調用基礎構造函數。
  • 通過 this.state.xxx 來使用某個狀態(tài)。
  • 通過 this.setState() 來修改狀態(tài)。

2. 正確的使用狀態(tài)

  • 不要直接更新狀態(tài)
  • 狀態(tài)更新可能是異步的
  • 狀態(tài)更新合并

PS

  • 函數定義的組件又叫無狀態(tài)組件,so,想給某個組件添加狀態(tài),需要使用類組件的方式

生命周期

1. 生命周期圖解

image.png

2. 生命周期介紹

  • constructor(props) - 構造函數
  • componentWillMount() - 組件掛載之前
  • render() - 渲染
  • componentDidMount() - 組件掛載完成
  • componentWillReceiveProps(nextProps) - 組件接收到新屬性前調用
  • shouldComponentUpdate(nextProps, nextState) - 我是否應該要更新呢
  • componentWillUpdate(nextProps, nextState) - 組件更新之前
  • componentDidUpdate(prevProps, prevState) - 組件更新完成
  • componentWillUnmount() - 組件卸載之前

3. 通過 shouldComponentUpdate(nextProps, nextState) 來處理一些性能問題

組件的某一些狀態(tài)或屬性的改變可能不需要進行頁面的更新。此時在 shouldComponentUpdate() 中返回 false 即可。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 作為一個合格的開發(fā)者,不要只滿足于編寫了可以運行的代碼。而要了解代碼背后的工作原理;不要只滿足于自己的程序...
    六個周閱讀 8,684評論 1 33
  • 生命周期流程圖簡單如下: 組件讓你把用戶界面分成獨立的,可重復使用的部分,并且將每個部分分開考慮。React.Co...
    Simple_Learn閱讀 1,197評論 0 0
  • 好比我們人除了短暫的生與死那一瞬之外,生命中剩下的時間都用在了每天活著的狀態(tài),對于React中的組件來講,占其總生...
    YeLqgd閱讀 10,660評論 0 7
  • 參考鏈接1.生命周期參考鏈接12.生命周期參考鏈接2 組件繼承了react Component等相關基類,也就是繼...
    嘻小佳閱讀 485評論 0 0
  • 所謂霧化,是指餌料入水后向下行過程中,使餌料中的細小顆粒隨之脫離餌料溶解于水,并在釣魚餌料的運動軌跡上形成一道自上...
    8ebe7f8e8924閱讀 1,148評論 0 50

友情鏈接更多精彩內容