React傳遞參數(shù)的多種方式

最常見的就是父子組件之間傳遞參數(shù)

父組件往子組件傳值,直接用this.props就可以實現(xiàn)

在父組件中揩环,給需要傳遞數(shù)據(jù)的子組件添加一個自定義屬性搔弄,在子組件中通過this.props就可以獲取到父組件傳遞過去的數(shù)據(jù)

// 父組件
 render() {
        return (
                // 使用自定義屬性傳遞需要傳遞的方法或者參數(shù)
                <ShopUi toson={this.state}></ShopUi>
            )
    } 

//子組件 
//通過this.props.toson就可以獲取到父組件傳遞過來的數(shù)據(jù) 

、丰滑、如果還需要往孫組件傳遞那么在子組件通過自定義屬性繼續(xù)傳遞就行了
      tograndson={this.props.toson}
顾犹、、孫組件通過this.props.tograndson獲取到數(shù)據(jù)

子組件給父組件傳值的話褒墨,需要在父組件設置接收函數(shù)和state炫刷,同時將函數(shù)名通過props傳遞給子組件

也就是給子組件傳入父組件的方法,在子組件進行調用

//孫子組件
export default class Grandson extends Component{
    render(){
        return (
            <div style={{border: "1px solid red",margin: "10px"}}>
        {this.props.name}:
                <select onChange={this.props.handleSelect}>
                    <option value="男">男</option>
                    <option value="女">女</option>
                </select>
            </div>
        )
    }
};
 
//子組件
export default class Child extends Component{
    render(){
        return (
            <div style={{border: "1px solid green",margin: "10px"}}>
                {this.props.name}:<input onChange={this.props.handleVal}/>
                <Grandson name="性別" handleSelect={this.props.handleSelect}/>
            </div>
        )
    }
};
 
//父組件
export default class Parent extends Component{
 
    constructor(props){
        super(props)
        this.state={
            username: '',
            sex: ''
        }   
    },
    handleVal(event){
        this.setState({username: event.target.value});
    },
    handleSelect(value) {
        this.setState({sex: event.target.value});
    },
    render(){
        return (
            <div style={{border: "1px solid #000",padding: "10px"}}>
                <div>用戶姓名:{this.state.username}</div>
                <div>用戶性別:{this.state.sex}</div>
                <Child name="姓名" handleVal={this.handleVal} handleSelect={this.handleSelect}/>
            </div>
        )
    }
}

前一段時間有人問過我這樣一個問題郁妈,constructor里面的super()是干嘛用的浑玛?

總結一下:

如果要在子類的constructor里使用this,必須調用父類constructor噩咪,否則就拿不到this

那么問題就來了顾彰,如何調用父類的constructor呢失晴? 通過super()

如果要在constructor里使用父組件傳遞過來的參數(shù),必須在調用父組件super時拘央,傳遞參數(shù)給父組件的constructor

如果不在constructor里面使用this涂屁,或者參數(shù),就不需要super 灰伟; 因為React以及幫你做了this拆又,props的綁定

路由傳參

安裝 npm install react-router-dom --save-dev

定義路由(一般會放在外面)

<HashRouter> 
    <Switch> 
        <Route exact path="/" component={Home}/> 
        <Route exact path="/detail" component={Detail}/> 
    </Switch> 
</HashRouter>

當頁面跳轉時

<li  onClick={el => this.props.history.push({
   pathname:'/detail',
      state:{id:3}
})}
>
</li>

接收 通過this.props.history.location可以獲取到傳遞過來的數(shù)據(jù)

*路由傳參可能會有這個問題,就是只有在路由定義時掛載的組件中才會有props里面的location history match *

路由上掛載的那個組件一般都是Container.js栏账,一般我們會往下分出UI.js組件帖族,在這里面進行點擊跳轉,UI組件props里沒有location history match **

需要用到高階組件withRouter

狀態(tài)提升

將多個組件需要共享的狀態(tài)提升到離他們最近的那個公共父組件上挡爵,然后父組件通過props分發(fā)給子組件

context

當某個組件在自己的context中保存了某個狀態(tài)竖般,那個該組件下的所有子孫組件都可以訪問到這個狀態(tài),不需要中間組件的傳遞茶鹃,而這個組件的父組件是沒辦法訪問的

class Index extends Component {
  static childContextTypes = {
    themeColor: PropTypes.string
  }

  constructor () {
    super()
    this.state = { themeColor: 'red' }
  }

  getChildContext () {
    return { themeColor: this.state.themeColor }
  }

  render () {
    return (
      <div>
        <Header />
        <Main />
      </div>
    )
  }
}

通過getChildContext()將屬性傳遞給所有的子孫組件
提供 context 的組件必須提供 childContextTypes 作為 context 的聲明和驗證涣雕。</pre>

class Title extends Component {
  static contextTypes = {
    themeColor: PropTypes.string
  }

  render () {
    return (
      <h1 style={{ color: this.context.themeColor }}>標題</h1>
    )
  }
}

子組件要獲取 context 里面的內容的話,就必須寫 contextTypes 來聲明和驗證你需要獲取的狀態(tài)的類型闭翩,它也是必寫的挣郭,如果你不寫就無法獲取 context 里面的狀態(tài)。
Title 想獲取 themeColor疗韵,它是一個字符串兑障,我們就在 contextTypes 里面進行聲明。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末蕉汪,一起剝皮案震驚了整個濱河市流译,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌者疤,老刑警劉巖福澡,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宛渐,居然都是意外死亡竞漾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門窥翩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鳞仙,你說我怎么就攤上這事寇蚊。” “怎么了棍好?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵仗岸,是天一觀的道長允耿。 經(jīng)常有香客問我,道長扒怖,這世上最難降的妖魔是什么较锡? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮盗痒,結果婚禮上蚂蕴,老公的妹妹穿的比我還像新娘。我一直安慰自己俯邓,他們只是感情好骡楼,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著稽鞭,像睡著了一般鸟整。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上朦蕴,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天篮条,我揣著相機與錄音,去河邊找鬼吩抓。 笑死兑燥,一個胖子當著我的面吹牛,可吹牛的內容都是我干的琴拧。 我是一名探鬼主播降瞳,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蚓胸!你這毒婦竟也來了挣饥?” 一聲冷哼從身側響起帆赢,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤泳梆,失蹤者是張志新(化名)和其女友劉穎痪署,沒想到半個月后仓坞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屹篓,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡叫榕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年混巧,在試婚紗的時候發(fā)現(xiàn)自己被綠了细睡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叹哭。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡忍宋,死狀恐怖,靈堂內的尸體忽然破棺而出风罩,到底是詐尸還是另有隱情糠排,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布超升,位于F島的核電站入宦,受9級特大地震影響哺徊,放射性物質發(fā)生泄漏。R本人自食惡果不足惜乾闰,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一落追、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涯肩,春花似錦轿钠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至铅乡,卻和暖如春继谚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阵幸。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工花履, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挚赊。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓诡壁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親荠割。 傳聞我的和親對象是個殘疾皇子妹卿,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容

  • 作為一個合格的開發(fā)者,不要只滿足于編寫了可以運行的代碼蔑鹦。而要了解代碼背后的工作原理夺克;不要只滿足于自己的程序...
    六個周閱讀 8,422評論 1 33
  • 目前,react組件有三種寫法嚎朽,分別是es5的createClass寫法铺纽,es6的class寫法,以及statel...
    ZoomFunc閱讀 1,618評論 0 1
  • 40哟忍、React 什么是React狡门?React 是一個用于構建用戶界面的框架(采用的是MVC模式):集中處理VIE...
    萌妹撒閱讀 1,005評論 0 1
  • 深入JSX date:20170412筆記原文其實JSX是React.createElement(componen...
    gaoer1938閱讀 8,048評論 2 35
  • 以下內容是我在學習和研究React時,對React的特性锅很、重點和注意事項的提取其馏、精練和總結,可以做為React特性...
    科研者閱讀 8,219評論 2 21