React中父組件如何獲取子組件的值或方法
父組件獲取子組件的值或方法
先來(lái)說(shuō)下從哪獲取的啟發(fā),想要從父組件獲取子組件的值或方法。。。
一次寫代碼的時(shí)候,用 Antd 中的 Modal 包裹了一個(gè)子組件,子組件中包含 input 輸入框,想要在點(diǎn)擊對(duì)話框上面確定按鈕時(shí)(即Modal 自帶的 onOk方法),拿到其中輸入的值
下面用一個(gè)父組件(Father.js)和子組件(Hearder.js)來(lái)演示如何能拿到值和方法:
方法一
給子組件添加屬性 ref='footer'
<Header ref='footer'></Header>
然后在父組件用 this.refs.footer.xxx 的方式拿值
alert(this.refs.footer.state.sonmsg);//拿到子組件中state中的值 this.refs.footer.run();//拿到子組件中runn方法
方法二
給子組件添加 onRef={(ref) => { this.child = ref; }}
<Header onRef={(ref) => { this.child = ref; }}></Header>
然后在子組件中添加生命周期的 componentDidMount 這個(gè)方法:
componentDidMount() { ? ? ?if (this.props.onRef) { ? ? ? ? this.props.onRef(this); ? ? ?} }
然后在父組件用 this.child.xxx 的方式拿值
alert(this.child.state.sonmsg); this.child.run();
方法三
在父組件創(chuàng)建ref容器:this.pw = React.createRef()
constructor(props) { ? ? super(props); ? ? // 方法3:創(chuàng)建用來(lái)保存ref標(biāo)識(shí)的標(biāo)簽對(duì)象的容器 ? ? this.pw = React.createRef() }
然后給子組件添加屬性:ref={this.pw}
<Header ref={this.pw}></Header>
然后就可以在父組件用 this.pw.current 拿到子組件值和方法:
alert(this.pw.current.state.sonmsg);? this.pw.current.run()
React函數(shù)式組件傳值之子傳父
在用react進(jìn)行函數(shù)式編程時(shí),父組件可以通過(guò)props向子組件傳值,那么子組件怎么向父組件傳值呢?
首先,父組件需要向子組件傳遞一個(gè)函數(shù),然后,子組件通過(guò)props獲取函數(shù)并附上參數(shù),最后,父組件通過(guò)函數(shù)拿到子組件傳遞的值。
具體案例
父組件:home.tsx
import React, { useState } from 'react'; import Child from './component/child'; import './index.less'; const Home: React.FC = () => { const [parentCount, setParentCountt] = useState<number>(0); const getChildCount = (val: number) => { setParentCountt(val); }; return ( <div className="home-wrap"> <p>我是父組件</p> <p>子組件傳過(guò)來(lái)的數(shù)字:{parentCount}</p> <Child getCount={getChildCount} /> </div> ); }; export default Home;
子組件:child.tsx
import React, { useState } from 'react'; type selfProps = { getCount: Function; }; const Child: React.FC<selfProps> = (props) => { const { getCount } = props; const [count, setCount] = useState<number>(0); const addCount = (val: number) => { setCount(val); getCount(val); }; return ( <div className="child-wrap"> <p>子組件</p> <p>數(shù)字:{count}</p> <button onClick={() => addCount(count + 1)}>數(shù)字遞增</button> </div> ); }; export default Child;
效果展示
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
React?Refs?的使用forwardRef?源碼示例解析
這篇文章主要為大家介紹了React?之?Refs?的使用和?forwardRef?的源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11windows下create-react-app 升級(jí)至3.3.1版本踩坑記
這篇文章主要介紹了windows下create-react-app 升級(jí)至3.3.1版本踩坑記,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02React實(shí)現(xiàn)核心Diff算法的示例代碼
這篇文章主要為大家詳細(xì)介紹了React如何實(shí)現(xiàn)Diff算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-04-04詳解使用React進(jìn)行組件庫(kù)開(kāi)發(fā)
本篇文章主要介紹了詳解使用React進(jìn)行組件庫(kù)開(kāi)發(fā),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02React實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)(左右聯(lián)動(dòng))
這篇文章主要為大家詳細(xì)介紹了React實(shí)現(xiàn)二級(jí)聯(lián)動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09React結(jié)合Drag?API實(shí)現(xiàn)拖拽示例詳解
這篇文章主要為大家介紹了React結(jié)合Drag?API實(shí)現(xiàn)拖拽示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03通過(guò)示例講解Remix?設(shè)計(jì)哲學(xué)理念
這篇文章主要為大家通過(guò)示例講解了Remix?設(shè)計(jì)哲學(xué)理念,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03