父組件調(diào)用子組件的方法

接著上一篇

搜索組件 - 父組件向子組件傳值(子組件調(diào)用父組件方法)

上一篇最后問到, 如果我想通過父組件中的事件來觸發(fā)子組件中的方法應該怎么做呢
首先, 第一步

子組件中寫一個方法

比如說例子中的獲取子組件input中的值
子組件js

  getInputData = () => {
    this.nameValue = this.state.nameValue;
    this.idValue = this.state.idValue;
    // 搜索時的值要傳入到父組件的接口. 
    // 所以牽扯到子組件向父組件傳值
    // 1.在子組件中定義一個事件. 用父組件傳遞過來的屬性(props),是個函數(shù),
    // 2. 呼叫這個函數(shù)把在子組件中拿到的值傳遞到父組件中的函數(shù)進行處理
    this.props.getInitData(
      this.nameValue,
      this.idValue,
    )
  }
  

父組件中調(diào)用子組件的地方增加一個屬性onRef

父組件js

<SearchBox
  onRef={this.onRef1} // 父組件調(diào)用子組件方法
 />

在父組件中寫入這個屬性的方法

父組件js

 // 父組件調(diào)用子組件的方法
  onRef1 = (ref) => {
    this.child = ref;
  }

父組件寫一個方法來觸發(fā)調(diào)用子組件中的方法

getChild = () => {
  this.child.getInputData(); // 如果調(diào)用了話, 那么子組件中的this.props.getInitData會被觸發(fā),
     // this.propsChildEvent這個方法也會被觸發(fā) 應該會打印input中的值
  }
<Button onClick={this.getChild}>我是觸發(fā)父組件調(diào)用子組件方法的方法</Button>

子組件中要引用this.props.onRef

  componentDidMount() {
    this.props.onRef(this);
  }

父組件js

class HomePage extends React.Component {
    constructor() {
        super();
        this.state = {
        }
    }

    // 一旦子組件點擊就會觸發(fā)此事件
    propsChildEvent = (nameValue = '', idValue = '') => {
        this.nameValue = nameValue;
        this.idValue = idValue;
        console.log('this.nameValue==',this.nameValue,
        'this.idValue==',this.idValue
    )
    }
    componentWillMount() {
        this.getData(1)
      }
     getData = (1) => {
        get('/api', {
          pageNum,
          pageSize: this.state.currentPageSize,
          exchangeNo: this.idValue || '', // 從子組件中拿到的input中的值
        })
          .then((resp) => {
              this.setState({
                tableData: resp.data.data.result,
              });
          })
          .catch((err) => {
            message.error(err.message);
          });
    }
    // 父組件調(diào)用子組件的方法
    onRef1 = (ref) => {
      this.child = ref;
    }
    getChild = () => {
      this.child.getInputData(); // 如果調(diào)用了話, 那么子組件中的this.props.getInitData會被觸發(fā),
      // this.propsChildEvent這個方法也會被觸發(fā) 應該會打印input中的值
    }
    render() {
        return (
            <div>
                <SearchBox
                  onRef={this.onRef1} // 父組件調(diào)用子組件方法
                  getInitData={this.propsChildEvent}
                  getAparentAjax={() => this.getData(1)}
                />
                <Button onClick={this.getChild}>我是觸發(fā)父組件調(diào)用子組件方法的方法</Button>
            </div>
        )
    }
}
export default HomePage;

子組件js

class SearchBox extends React.Component {
  constructor() {
    super();
    this.state = {
      nameValue: '',
      idValue: '',
    }
  }
  changeFieldValue = (e, key) => {
    const value = typeof e === 'object' ? e.target.value : e;
    this.setState({
      [key]: value,
    });
  }
  getInputData = () => {
    this.nameValue = this.state.nameValue;
    this.idValue = this.state.idValue;
    // 搜索時的值要傳入到父組件的接口. 
    this.props.getInitData(
      this.nameValue,
      this.idValue,
    )
  }
  componentDidMount() {
    this.props.onRef(this);
  }
  // 獲取所有input中的值
  onSearch = () => {
    this.nameValue = this.state.nameValue;
    this.idValue = this.state.idValue;
    // 搜索時的值要傳入到父組件的接口. 
    this.props.getInitData(
      this.nameValue,
      this.idValue,
    )
    this.props.getAparentAjax();
  }
    render() {
        return (
          <div>
            <Row gutter={16}>
              <Col span={3}><span>名稱:</span></Col>
              <Col span={6}>
              <Input
                placeholder="請輸入"
                onChange={ (e) => { this.changeFieldValue(e, 'nameValue'); } }
                value={this.state.nameValue}
              /></Col>
            </Row>
            <Row gutter={16}>
              <Col span={3}><span>id:</span></Col>
              <Col span={6}>
              <Input
                placeholder="請輸入"
                onChange={ (e) => { this.changeFieldValue(e, 'idValue'); } }
                value={this.state.idValue}
                width="320px"
              /></Col>
            </Row>
            <Row gutter={16}>
              <Col offset={3} span={4}>
              <Button
                type="primary"
                style={{ marginLeft: '10px' }}
                className="searchButton"
                onClick={this.onSearch}
                width="320px"
              >
                搜索
              </Button></Col>
            </Row>
          
          </div>
        )
    }
}
export default SearchBox;
在這里插入圖片描述
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末横漏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子握联,更是在濱河造成了極大的恐慌甩恼,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孤澎,死亡現(xiàn)場離奇詭異届氢,居然都是意外死亡,警方通過查閱死者的電腦和手機覆旭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門退子,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人型将,你說我怎么就攤上這事寂祥。” “怎么了七兜?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵丸凭,是天一觀的道長。 經(jīng)常有香客問我腕铸,道長惜犀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任恬惯,我火速辦了婚禮向拆,結果婚禮上,老公的妹妹穿的比我還像新娘酪耳。我一直安慰自己浓恳,他們只是感情好,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布碗暗。 她就那樣靜靜地躺著颈将,像睡著了一般。 火紅的嫁衣襯著肌膚如雪言疗。 梳的紋絲不亂的頭發(fā)上晴圾,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音噪奄,去河邊找鬼死姚。 笑死人乓,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的都毒。 我是一名探鬼主播色罚,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼账劲!你這毒婦竟也來了戳护?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤瀑焦,失蹤者是張志新(化名)和其女友劉穎腌且,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榛瓮,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡铺董,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了榆芦。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柄粹。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡喘鸟,死狀恐怖匆绣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情什黑,我是刑警寧澤崎淳,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站愕把,受9級特大地震影響拣凹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恨豁,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一嚣镜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧橘蜜,春花似錦菊匿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至象颖,卻和暖如春佩厚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背说订。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工抄瓦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留潮瓶,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓钙姊,卻偏偏與公主長得像筋讨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子摸恍,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容