亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在React中更新父狀態?

如何在React中更新父狀態?

互換的青春 2019-07-25 15:22:25
如何在React中更新父狀態?我的結構如下:Component 1    - |- Component 2  - - |- Component 4  - - -  |- Component 5  Component 3組件3應該根據組件5的狀態顯示一些數據。由于props是不可變的,我不能簡單地將它保存在組件1中并轉發它,對吧?是的,我讀過有關redux的內容,但不想使用它。我希望只有反應就可以解決它。我錯了嗎?
查看完整描述

3 回答

?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

對于子父通信,您應該傳遞一個函數,將狀態從父級設置為子級,就像這樣


class Parent extends React.Component {
  constructor(props) {
    super(props)

    this.handler = this.handler.bind(this)
  }

  handler(someValue) {
    this.setState({
      someVar: someValue    })
  }

  render() {
    return <Child handler = {this.handler} />
  }}class Child extends React.Component {
  render() {
    return <Button onClick = {this.props.handler}/ >
  }}

這樣,孩子可以通過調用帶有props傳遞的函數來更新父級的狀態。

但是你必須重新考慮組件的結構,因為據我所知,組件5和3不相關。

一種可能的解決方案是將它們包裝在更高級別的組件中,該組件將包含組件1和3的狀態。該組件將通過props設置較低級別的狀態。


查看完整回答
反對 回復 2019-07-25
?
catspeake

TA貢獻1111條經驗 獲得超0個贊

我發現以下工作解決方案將onClick函數參數從child傳遞給父組件:

傳遞方法的版本()

//ChildB componentclass ChildB extends React.Component {

    render() {

        var handleToUpdate  =   this.props.handleToUpdate;
        return (<div><button onClick={() => handleToUpdate('someVar')}>
            Push me          </button>
        </div>)
    }}//ParentA componentclass ParentA extends React.Component {

    constructor(props) {
        super(props);
        var handleToUpdate  = this.handleToUpdate.bind(this);
        var arg1 = '';
    }

    handleToUpdate(someArg){
            alert('We pass argument from Child to Parent: ' + someArg);
            this.setState({arg1:someArg});
    }

    render() {
        var handleToUpdate  =   this.handleToUpdate;

        return (<div>
                    <ChildB handleToUpdate = {handleToUpdate.bind(this)} /></div>)
    }}if(document.querySelector("#demo")){
    ReactDOM.render(
        <ParentA />,
        document.querySelector("#demo")
    );}

看看JSFIDDLE

傳遞箭頭功能的版本

//ChildB componentclass ChildB extends React.Component {

    render() {

        var handleToUpdate  =   this.props.handleToUpdate;
        return (<div>
          <button onClick={() => handleToUpdate('someVar')}>
            Push me          </button>
        </div>)
    }}//ParentA componentclass ParentA extends React.Component { 
    constructor(props) {
        super(props);
    }

    handleToUpdate = (someArg) => {
            alert('We pass argument from Child to Parent: ' + someArg);
    }

    render() {
        return (<div>
            <ChildB handleToUpdate = {this.handleToUpdate} /></div>)
    }}if(document.querySelector("#demo")){
    ReactDOM.render(
        <ParentA />,
        document.querySelector("#demo")
    );}

看看JSFIDDLE


查看完整回答
反對 回復 2019-07-25
  • 3 回答
  • 0 關注
  • 803 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號