React 父子組件通信的實現(xiàn)方法
通訊是單向的,數(shù)據(jù)必須是由一方傳到另一方。
1.父組件與子組件間的通信。
在 React 中,父組件可以向子組件通過傳 props 的方式,向子組件進(jìn)行通訊。
父組件 App.js
import React, { Component } from 'react';
import './App.css';
import Child from './child'
class App extends Component {
constructor(props){
super(props);
this.state={
msg:'父類的消息',
name:'John',
age:99
}
}
callback=(msg,name,age)=>{
// setState方法,修改msg的值,值是由child里面?zhèn)鬟^來的
this.setState({msg});
this.setState({name});
this.setState({age});
}
render() {
return (
<div className="App">
<p> Message: {this.state.msg}</p>
<Child callback={this.callback} age={this.state.age} name={this.state.name}></Child>
</div>
);
}
}
export default App;
父組件中,state里面有三個屬性,分別是msg,name和age,在子組件child中,如果想拿到父組件里面的屬性,就需要通過props傳遞。
在 <Child></Child> 標(biāo)簽里面添加
name={this.state.name} age={this.state.age}
寫成
<Child name={this.state.name} age={this.state.age}></Child>
name和age分別是你要傳遞的屬性。
子組件 Child
import React from "react";
class Child extends React.Component{
constructor(props){
super(props);
this.state={
name:'Andy',
age:31,
msg:"來自子類的消息"
}
}
change=()=>{
this.props.callback(this.state.msg,this.state.name,this.state.age);
}
render(){
return(
<div>
<div>{this.props.name}</div>
<div>{this.props.age}</div>
<button onClick={this.change}>點(diǎn)擊</button>
</div>
)
}
}
export default Child;
在子組件中,通過 {this.props.name} {this.props.age}就能拿到父組件里面的數(shù)據(jù)。

呈現(xiàn)在頁面上的就是這個樣子。
其中 John,99均來自于父組件App.js
2.子組件向父組件通信
子組件向父組件通訊,同樣也需要父組件向子組件傳遞 props 進(jìn)行通訊,只是父組件傳遞的,是作用域為父組件自身的函數(shù),子組件調(diào)用該函數(shù),將子組件想要傳遞的信息,作為參數(shù),傳遞到父組件的作用域中。
上面例子中,在子組件Child中綁定了onClick事件。 調(diào)用this.change方法。
注意change函數(shù)采用了箭頭函數(shù)的寫法 change=()=>{},目的是為了改變this的指向。使得在函數(shù)單獨(dú)調(diào)用的時候,函數(shù)內(nèi)部的this依然指向child組件
如果不使用箭頭函數(shù),而是采用普通的寫法
change(){
}
則需要在 constructor中綁定this,
this.change=this.change.bind(this)
或者在onClick方法中綁定this,
onClick={this.change=this.change.bind(this)}
在change方法中,通過props發(fā)送出去一個方法,比如說叫callback方法,父組件中去接收這個方法,callback={this.callback},然后在自身的callback函數(shù)中進(jìn)行一些列操作。
本例中,函數(shù)callback中就是通過調(diào)用 setState方法來改變值。
點(diǎn)擊按鈕后頁面顯示:

可以看到,我們既實現(xiàn)了通過props將父組件里面的數(shù)據(jù)傳遞給子組件的效果,也實現(xiàn)了通過子組件按鈕點(diǎn)擊事件,將子組件里面的數(shù)據(jù)發(fā)送給父組件
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
react項目中使用react-dnd實現(xiàn)列表的拖拽排序功能
這篇文章主要介紹了react項目中使用react-dnd實現(xiàn)列表的拖拽排序,本文結(jié)合實例代碼講解react-dnd是如何實現(xiàn),代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02
antd中form表單的wrapperCol和labelCol問題詳解
最近學(xué)習(xí)中遇到了些問題,所以給大家總結(jié),下面這篇文章主要給大家介紹了關(guān)于antd中form表單的wrapperCol和labelCol問題的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
React Native可復(fù)用 UI分離布局組件和狀態(tài)組件技巧
這篇文章主要為大家介紹了React Native可復(fù)用 UI分離布局組件和狀態(tài)組件使用技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
在React中使用Antd上傳并讀取Excel文件的詳細(xì)步驟
在React中使用Antd組件庫來上傳并讀取Excel文件,可以結(jié)合antd的Upload組件和xlsx庫來實現(xiàn),以下是一個詳細(xì)的步驟和示例代碼,展示如何在React應(yīng)用中實現(xiàn)這一功能,感興趣的小伙伴跟著小編一起來看看吧2025-01-01
React利用scheduler思想實現(xiàn)任務(wù)的打斷與恢復(fù)
這篇文章主要為大家詳細(xì)介紹了React如何利用scheduler思想實現(xiàn)任務(wù)的打斷與恢復(fù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2024-03-03

