React:組件的數據

React組件的數據分為兩種,prop和state,無論prop或者state的改變,都可能引發組件的重新渲染,那么,設計一個組件的時候,什么時候選擇用prop什么時候用state呢?原則很簡單,prop是組件的對外接口,state是組件的內部狀態,對外用prop,對內用state。

React的prop

prop是property的簡寫,是從外部傳遞給組件的數據,一個React組件通過定義自己能夠接受的prop就定義了自己的對外公共接口。
每個React組件都是獨立存在的模塊,組件之外的一切都是外部世界,外部世界就是通過prop來和組件對話的。

讀取prop

class Children1 extends React.Component {
    render() {
        return (
            <div>{this.props.a1}</div> //這里props.a1就是Children1相對于父組件的接口
        )
    }
}

給prop賦值,并接受父組件傳的參數

class Rongqi extends React.Component {
    render() {
        return (
            <div>
                <h1>{this.state.h1}</h1>
                <Children1 a1={'任何數據'} /> //Children1組件調用,a1接受父親傳的參數
            </div>
        )
    }
}

React的state

驅動組件渲染的過程除了prop,還有state,state代表組件的內部狀態。由于React不能修改傳入的prop,所以需要記錄自身數據的變化,就要使用state。

初始化state

    constructor(props) {
        super(props);
        this.state = {
            h1: '父親數據111',
            a1: '兒子數據111',
            a2: '兒子數據222'
        }
    }

讀取和更新state

改變組件state必須使用this.setState函數,不能直接去修改this.state。

class Rongqi extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            h1: '父親數據111',
            a1: '兒子數據111',
            a2: '兒子數據222'
        }
    }
    render() {
        return (
            <div>
                <h1>{this.state.h1}</h1> //子組件Children2向父組件傳數據
                <Children1 a1={this.state.a1} /> //父組件向子組件Children1傳數據
                <Children2 a2={this.state.a2} setstate={this.setState.bind(this)} /> 
            </div>
        )
    }
}
class Children1 extends React.Component {
    render() {
        return (
            <div>{this.props.a1}</div>
        )
    }
}
class Children2 extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            a2: '2222兒子的數據'
        }
    }
    render() {
        return (
            <div onClick={() => {
                this.props.setstate({ h1: '我是兒子的數據' })
            }}>{this.props.a2}</div>
        )
    }
}

prop和state的對比

  • prop用于定義外部接口,state用于記錄內部狀態;
  • prop的賦值在外部世界使用組件時,state的賦值在組件內部;
  • 組件不應該改變prop的值,state存在的目的就是讓組件來改變的。
    組件的state就相當于組件的記憶,其存在意義就是被修改,每一次通過this.setState就改變了組件的狀態,然后通過渲染過程把這種變化體現出來。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • It's a common pattern in React to wrap a component in an ...
    jplyue閱讀 3,312評論 0 2
  • 本筆記基于React官方文檔,當前React版本號為15.4.0。 1. 安裝 1.1 嘗試 開始之前可以先去co...
    Awey閱讀 7,807評論 14 128
  • 一段回憶里有一個故事,一個故事里有兩個人,兩個人里有我和他,我和他在朦朦朧朧的夜色里看到彼此。我走過一排又一排的臺...
    余珂閱讀 333評論 4 6
  • (謹以此寫給遠去的父親) 父親,一個涵蓋了最深沉最寬厚最嚴厲也最溫情的……一個愛的總稱。 關于寫您的文字,一直逃避...
    fe3c86979609閱讀 358評論 1 2
  • 今天晚上體重53.70公斤。經過了今天的四次燃燒,脂肪,流汗。明天的體重應該在52公斤左右。期待。
    許敏雅蘭閱讀 123評論 0 1