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

接著上一篇文章繼續(xù) , 傳送門, 上一篇地址

搜索組件 - react中子組件向父組件中傳值

接著, 在上一篇中, 在父組件中拿到了子組件input框中的內(nèi)容值, 然后在父組件中使用, 接下來點(diǎn)擊搜索以后,我肯定是需要再次調(diào)用接口來重新渲染搜索的頁面的

所以 在父組件調(diào)用子組件的位置上添加一個(gè)屬性, 向子組件傳遞

<SearchBox
   getInitData={this.propsChildEvent}
    getAparentAjax={() => this.getData(1)}
 />

子組件中只需要使用this.props.getAparentAjax();就可以調(diào)用此方法

整個(gè)的代碼
父組件index.js

import React from 'react';
import TopHead from '../topToopbar/topHead.js'
import { Table, message } from 'antd';
import SearchBox from './searchBox.js';
import { get } from '../../util/http'
import { Link } from 'react-router-dom';
import moment from 'moment';
import $ from 'jquery';

class HomePage extends React.Component {
    constructor() {
        super();
        this.state = {
          nameValue: '',
          idValue: '',
          tableColumns: [],
          tableData: [],
          currentPageSize: 10,
        }
        this.tableColumns = [];
    }
    componentDidMount() {
        // var that = this;
        // $.ajax({
        //     type: 'get',
        //     url: 'http://10.70.119.183:8084//api?pageNum=1&pageSize=10&exchangeNo=',
        //     dataType: 'json',
        //     async: true,
        //     success: function(data) {
        //         that.setState({ arr: data.data });
        //         console.log(that.state.arr)
        //     }
        // })
        
    }
    // 一旦子組件點(diǎn)擊就會(huì)觸發(fā)此事件
    propsChildEvent = (nameValue = '', idValue = '') => {
        this.nameValue = nameValue;
        this.idValue = idValue;
        console.log('this.nameValue==',this.nameValue,
        'this.idValue==',this.idValue
    )
    }
    componentWillMount() {
        this.tableColumns.push({
          title: '單號(hào)',
          dataIndex: 'exchangeNo',
          key: 'exchangeNo',
        },
        {
            title: '獲取時(shí)間',
            dataIndex: 'createTime',
            key: 'createTime',
            render: (text, record) => moment(record.createTime).format('YYYY-MM-DD'),
        },
        {
            title: '操作',
            key: 'action',
            render: (text, record) => {
              const data = JSON.stringify({ exchangeNo: record.exchangeNo });
              return (
                <span>
                  <Link to={`/platform/cascadeManage/exchangeUseDetail/${data}`}>使用詳情</Link>
                </span>
              );
           },
        }
        );
        this.getData(1)
      }
     getData = (pageNum) => {
        get('/api', {
          pageNum,
          pageSize: this.state.currentPageSize,
          exchangeNo: this.idValue || '', // 從子組件中拿到的input中的值
        })
          .then((resp) => {
              this.setState({
                tableData: resp.data.data.result,
                resPages: resp.data.data,
                loading: true,
                currentPage: pageNum,
              });
          })
          .catch((err) => {
            message.error(err.message);
          });
    }
    render() {
        return (
            <div>
                <SearchBox
                  getInitData={this.propsChildEvent}
                  getAparentAjax={() => this.getData(1)}
                />
                <Table pagination columns={this.tableColumns} dataSource={this.state.tableData} />
            </div>
        )
    }
}
export default HomePage;

子組件searchBox.js

import React from 'react';
import { Link } from 'react-router-dom';
import { Input, message, Button, Row, Col } from 'antd';

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,
    });
  }
  // 獲取所有input中的值
  onSearch = () => {
    this.nameValue = this.state.nameValue;
    this.idValue = this.state.idValue;
    // 搜索時(shí)的值要傳入到父組件的接口. 
    // 所以牽扯到子組件向父組件傳值
    // 1.在子組件中定義一個(gè)事件. 用父組件傳遞過來的屬性(props),是個(gè)函數(shù),
    // 2. 呼叫這個(gè)函數(shù)把在子組件中拿到的值傳遞到父組件中的函數(shù)進(jìn)行處理
    this.props.getInitData(
      this.nameValue,
      this.idValue,
    )
    // 3. 去父組件中引用子組件的地方定義一個(gè)函數(shù)來接收this.props.getInitData傳遞過來的值
    // 4.點(diǎn)擊搜索以后, 還需要請(qǐng)求接口, 那么就需要子組件調(diào)用父組件方法, 或者說父組件向子組件傳遞方法,
    // 這個(gè)和父組件向子組件傳值是相同的 都是用到了props
    this.props.getAparentAjax();
  }
    render() {
        return (
          <div>
            <Row gutter={16}>
              <Col span={3}><span>名稱:</span></Col>
              <Col span={6}>
              <Input
                placeholder="請(qǐng)輸入"
                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="請(qǐng)輸入"
                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;

點(diǎn)擊搜索重新調(diào)用


image.png

上面是我點(diǎn)擊搜索的時(shí)候通過觸發(fā)onSearch事件, 才能調(diào)用this.props.getInitData 把它傳遞給父組件,我才能在父組件中拿到該值.

現(xiàn)在我不想通過點(diǎn)擊搜索來拿到input中的值, 子組件中只有一個(gè)搜索事件可以觸發(fā)使我拿到this.props.getInitData , 現(xiàn)在我在子組件中另外寫一個(gè)方法來觸發(fā)獲取this.props.getInitData , 那么我就需要在父組件中調(diào)用子組件的方法
接下來講解一下

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子持痰,更是在濱河造成了極大的恐慌铸本,老刑警劉巖嗽桩,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件床绪,死亡現(xiàn)場離奇詭異机杜,居然都是意外死亡帜讲,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門椒拗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來似将,“玉大人获黔,你說我怎么就攤上這事⊥娼迹” “怎么了肢执?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長译红。 經(jīng)常有香客問我预茄,道長,這世上最難降的妖魔是什么侦厚? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任耻陕,我火速辦了婚禮,結(jié)果婚禮上刨沦,老公的妹妹穿的比我還像新娘诗宣。我一直安慰自己,他們只是感情好想诅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布召庞。 她就那樣靜靜地躺著,像睡著了一般来破。 火紅的嫁衣襯著肌膚如雪篮灼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天徘禁,我揣著相機(jī)與錄音诅诱,去河邊找鬼。 笑死送朱,一個(gè)胖子當(dāng)著我的面吹牛娘荡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播驶沼,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼炮沐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了回怜?” 一聲冷哼從身側(cè)響起央拖,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后专控,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抹凳,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年伦腐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赢底。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖幸冻,靈堂內(nèi)的尸體忽然破棺而出粹庞,到底是詐尸還是另有隱情,我是刑警寧澤洽损,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布庞溜,位于F島的核電站,受9級(jí)特大地震影響碑定,放射性物質(zhì)發(fā)生泄漏流码。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一延刘、第九天 我趴在偏房一處隱蔽的房頂上張望漫试。 院中可真熱鬧,春花似錦碘赖、人聲如沸驾荣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽播掷。三九已至,卻和暖如春劫哼,著一層夾襖步出監(jiān)牢的瞬間叮趴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國打工权烧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留眯亦,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓般码,卻偏偏與公主長得像妻率,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子板祝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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