網(wǎng)上也看了很多關(guān)于 props
和state
放在一塊兒對(duì)比的文章财骨。
state
感覺沒什么特別需要說明的镐作,就是一個(gè)狀態(tài)機(jī)的變量,主要是跟用戶交互相關(guān)隆箩。
而props
更多的是一個(gè)頁面間傳遞屬性變量來使用的東西该贾。
參考鏈接 阮一峰 關(guān)于React入門
由于這篇參考問是大神在15年寫的。里面大部分的內(nèi)容都是ES5的.
下面是我整理的一些個(gè)人的理解捌臊。
RN的props
理解
props
是用來組見之間單項(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
不是寫在這種必須顯示的地方钓试,那么這個(gè)name
在A組件賦值的時(shí)候装黑,也不一定要賦值。
class B extends Component {
render() {
return (
<View style={{alignItems: 'center'}}>
<A name='Hello' />
</View>
);
}
}
簡(jiǎn)而言之弓熏,通過
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)屬性清寇。訪問還是通過this.props.duration
- ES5的寫法:
getDefaultProps(){ return {duration:1000} }
- ES6
static defaultProps = { duration:1000, }