react開發(fā)教程之React 組件之間的通信方式
這兩天學(xué)習(xí)了React感覺組件通信這個(gè)地方知識(shí)點(diǎn)挺多的,而且很重要,所以,今天添加一點(diǎn)小筆記。
父子組件通訊
通訊手段
這是最常見的通信方式,父組件只需要將子組件需要的props傳給子組件,子組件直接通過this.props來使用。
通訊內(nèi)容
更多要提的是如何合理的設(shè)置子組件的props,要想將子組件設(shè)計(jì)成一個(gè)復(fù)用性強(qiáng)的通用組件,需要將能夠復(fù)用的部分抽象出來,抽象出來的props有兩種形成,一種是簡(jiǎn)單的變量,另一種是抽象出來處理某種邏輯函數(shù)。
以Header 組件為例

//HeaderBar.jsx 子組件
import React, { Component } from 'react';
class Header extends Component {
constructor() {
super();
this.handleClick = (e) => {
console.log(this)
}
}
renderLeftComponent() {
let leftDOM = {};
if (this.props.renderLeftComponent) {
return this.props.renderLeftComponent();
}
if (this.props.showBack) {
let backFunc = this.props.onBack || this.goBack;
leftDOM = (<a onClick={backFunc.bind(this)}><i className="icon left-icon icon-left-arrow"></i></a>);
}
return leftDOM;
}
renderRightComponent() {
if (this.props.renderRightComponent) {
return this.props.renderRightComponent();
}
}
goBack() {
alert("返回上一頁(yè)")
}
render() {
return (
<header className="header-bar">
{this.renderLeftComponent()}
<span>{this.props.title || '滴滴'}</span>
{this.renderRightComponent()}
</header>
);
}
}
export default Header;
//父親組件部分代碼App.jsx
import HeaderBar from "./components/Header";
let leftIcon = function () {
return (
<a><i className="icon left-icon icon-left-haha"></i>左邊按鈕</a>
)
}
class App extends Component {
render() {
return (
<div className="App">
<HeaderBar title="滴滴打車" renderLeftComponent={leftIcon} />
</div>
);
}
}
子父組件通訊
父-子組件通信的手段是通過子組件的props是子組件用父組件的東西,子-父組件通信,是父組件用子組件的東西,暫時(shí)了解的兩種方法
利用回調(diào)函數(shù)
父組件通過props傳遞一個(gè)方法給子組件,子組件通過props方法將子組件數(shù)據(jù)傳遞給父組件
利用ref
父組件通過refs調(diào)用子組件的屬性
跨級(jí)組件通信
在React中當(dāng)一個(gè)屬性反復(fù)使用并且存在與好幾個(gè)子組件中的時(shí)候,這個(gè)時(shí)候我們?nèi)绻ㄟ^props一級(jí)一級(jí)傳遞的話可以實(shí)現(xiàn)多層級(jí)訪問,但是這樣出現(xiàn)一個(gè)問題就是會(huì)使代碼非?;靵y,在React中國(guó)年,我們還可以使用 context 來實(shí)現(xiàn)跨級(jí)父子組件間的通信;
在react中context稱為蟲洞
// Component 父級(jí)
class parentComponent extends React.Component {
// add the following property
static childContextTypes = {
color: React.PropTypes.string
}
// 添加下面方法
getChildContext() {
return {
color: "#f00"
}
}
render() {
<div>
<Child1 />
</div>
}
}
// Component Child1
class Child1 extends React.Component {
// 添加下面屬性
static contextTypes = {
color: React.PropTypes.string
}
render() {
<div>{this.context.color}</div>
}
}
同級(jí)組件通信
同級(jí)組件之間的通信還是需要通過父組件作為中介,利用多次父-子組件通信,項(xiàng)目中將需要傳遞的數(shù)據(jù)放在了父組件的state中,變動(dòng)時(shí)可以自動(dòng)的同步傳遞。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
react-native DatePicker日期選擇組件的實(shí)現(xiàn)代碼
本篇文章主要介紹了react-native DatePicker日期選擇組件的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,有興趣的可以了解下2017-09-09
React使用Props實(shí)現(xiàn)父組件向子組件傳值
在React中,組件之間的數(shù)據(jù)傳遞通常是通過屬性(Props)來實(shí)現(xiàn)的,父組件可以通過屬性向子組件傳遞數(shù)據(jù),這是React組件通信的基礎(chǔ)模式之一,本文將探討如何使用Props來實(shí)現(xiàn)父組件向子組件傳遞數(shù)據(jù),需要的朋友可以參考下2025-04-04
ReactNative頁(yè)面跳轉(zhuǎn)實(shí)例代碼
這篇文章主要介紹了ReactNative頁(yè)面跳轉(zhuǎn)的代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
react-router?重新加回跳轉(zhuǎn)攔截功能詳解
這篇文章主要為大家介紹了react-router?重新加回跳轉(zhuǎn)攔截功能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
React踩坑之a(chǎn)ntd輸入框rules中的required=true問題
這篇文章主要介紹了React踩坑之a(chǎn)ntd輸入框rules中的required=true問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
React中使用react-json-view展示JSON數(shù)據(jù)的操作方法
react-json-view是一個(gè)用于顯示和編輯javascript數(shù)組和JSON對(duì)象的React組件,本文給大家分享React中使用react-json-view展示JSON數(shù)據(jù)的操作方法,感興趣的朋友一起看看吧2023-12-12
React如何使用sortablejs實(shí)現(xiàn)拖拽排序
這篇文章主要介紹了React如何使用sortablejs實(shí)現(xiàn)拖拽排序問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
詳解react的兩種動(dòng)態(tài)改變css樣式的方法
這篇文章主要介紹了詳解react的兩種動(dòng)態(tài)改變css樣式的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
antd之RangePicker設(shè)置默認(rèn)值方式
這篇文章主要介紹了antd之RangePicker設(shè)置默認(rèn)值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12

