一.state和props
這里首先說一下概念,props一般屬于父組件,然后getDefaultProps是設置默認props,如果父組件沒有給某個prop那就用默認的,getInitialState是設置組件mount以后的初始state的。
state屬于組件內部屬性,是會頻繁修改的,每次state值的改變都會導致components從 當前狀態進入update階段,從而重新render,當子組件繼承了父組件 自然就繼承了父組件里面所有方法。
·prop用于定義外部接口,state用于記錄內部狀態;
·prop的賦值在外部世界使用組件時,state的賦值在組件內部;
·組件不應該改變prop的值,而state存在的目的就是讓組件來改變的。
二. 組件傳值和讀值
class Details extends React.Component {
constructor(props) {
super(props);
this.Sort=this.Sort.bind(this)
this.state = {
value: props.initValue || 0
}
}
-
外部傳內部
父組件傳給子組件用props傳值,子組件通過訪問props可以讀到父組件傳進來的值;讀取prop值,需要在子組件的構造函數里面第一行通過`super調用父類的構造函數(React.Component),只有這樣組件被構造后,類實例的所有成員函數才可以通過this.props訪問父組件傳遞過來的props值。主要是在構造函數中通過參數props獲得傳入的prop值,并且在構造函數中可以進行this執行環境的綁定。
//子組件在父組件中使用,傳入props值,data和typename
<Tagconnect data={result} typename="log_type"/>
//子組件中接收這個props值
class Tagconnect extends React.Component{
render(){
return(
this.props.data===undefined?<div>無數據</div>: <div className={this.props.typename}>有數據</div>
)
}
}
-
內部傳外部
子組件傳值給父組件,依然是通過prop,將函數賦予prop,此時相當于父組件給予子組件一個回調函數,子組件調用函數可以把內部信息傳遞給外部
//這里是子組件的定義 通過handleSearch函數內調用this.props.callback(value)函數將value這個值傳給外部callback函數,外部有對應的回調函數
//可以接受到這個值
class NormalLoginForm extends React.Component{
handleSearch=(value)=> {
if(value===""){
return
}
this.props.callback(value);//調用外部回調函數
};
render(){
return (
<Search
placeholder="一鍵搜"
onSearch={value=>this.handleSearch(value)}
/>
)
}
}
<ImeiForm callback={this.searchImei.bind(this,Config.homepageIMEISearch)}/>//這里是子組件在父組件中的使用
//這里是父組件中的回調函數
searchImei=(config,value)=>{
console.log(value)//得到子組件中的value值
}