React Native踩坑日記(二) props

網(wǎng)上也看了很多關(guān)于 propsstate放在一塊兒對(duì)比的文章。
state感覺(jué)沒(méi)什么特別需要說(shuō)明的,就是一個(gè)狀態(tài)機(jī)的變量,主要是跟用戶交互相關(guān)。
props更多的是一個(gè)頁(yè)面間傳遞屬性變量來(lái)使用的東西。

參考鏈接 阮一峰 關(guān)于React入門(mén)
由于這篇參考問(wèn)是大神在15年寫(xiě)的。里面大部分的內(nèi)容都是ES5的.
下面是我整理的一些個(gè)人的理解。


RN的props理解

props是用來(lái)組見(jiàn)之間單項(xiàng)傳值用的。類似于我們OC中的 @property.區(qū)別在于以下三點(diǎn)

一、this.props不需要像OC中一樣,需要提前聲明。聲明的情況是非必要的。

(這里先不去考慮復(fù)雜情況下的 this.props.children
不同于C或者OC,我們的屬性值分為私有和共有,而且需要聲明。
在JS中,直接輸入一個(gè)this.props.屬性名就可以定義了。通常都是在組件的調(diào)用時(shí)賦值,而在運(yùn)行時(shí)生效。
例如
A組件中聲明了調(diào)用我A組件的時(shí)候,有一個(gè)屬性變量name, 那么你在跨組件調(diào)用A的時(shí)候,可以對(duì)這個(gè)name作賦值(也可以不賦值,非必要)

class A extends Component {
  render() {
    return (<Text>Hello {this.props.name}!</Text>);
  }
}

在B組件中調(diào)用A組件,并給name賦值,這樣輸出的時(shí)候就會(huì)顯示Hello了。
如果上面的this.props.name不是寫(xiě)在這種必須顯示的地方,那么這個(gè)name在A組件賦值的時(shí)候,也不一定要賦值。

class B extends Component {
  render() {
    return (
      <View style={{alignItems: 'center'}}>
        <A name='Hello' />
      </View>
    );
  }
}

簡(jiǎn)而言之,通過(guò)this.props.屬性名相當(dāng)于一種懶加載的屬性聲明,只在調(diào)用到的時(shí)候被替換。

二、如果我們需要聲明某個(gè)組件中必須包含某種變量類型的某變量,就要用到PropTypes做聲明了。

例如以下代碼段。
Mytitle組件有一個(gè)title屬性。PropTypes 告訴 React,這個(gè) title 屬性是必須的,而且它的值必須是字符串

var MyTitle = React.createClass({
  static propTypes: {
    title: React.PropTypes.string.isRequired,
  },

  render: function() {
     return (
        <View>
          <Text> Hello {this.props.title} </Text>
        </View>
     );
  }
});

三、如果某屬性變量需要賦初始的默認(rèn)值,則也需要用靜態(tài)去作賦值。

設(shè)置默認(rèn)屬性。訪問(wèn)還是通過(guò)this.props.duration

  • ES5的寫(xiě)法:
    getDefaultProps(){  
      return {duration:1000}  
    }  
    
  • ES6
    static defaultProps = {  
       duration:1000,  
     }  
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 深入JSX date:20170412筆記原文其實(shí)JSX是React.createElement(componen...
    gaoer1938閱讀 8,190評(píng)論 2 35
  • 以下內(nèi)容是我在學(xué)習(xí)和研究React時(shí),對(duì)React的特性、重點(diǎn)和注意事項(xiàng)的提取、精練和總結(jié),可以做為React特性...
    科研者閱讀 8,423評(píng)論 2 21
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,694評(píng)論 19 139
  • Learn from React 官方文檔 一、Rendering Elements 1. Rendering a...
    恰皮閱讀 2,729評(píng)論 2 3
  • 文「徐比比比比比比」 還有兩天就要高考了,內(nèi)心百感交集。 十七歲的自己回憶過(guò)去的十二年歲月,竟然有些滄桑。是啊,一...
    徐比比比比比比閱讀 321評(píng)論 0 0

友情鏈接更多精彩內(nèi)容