摘要:在使用的過程中,不可避免的需要組件間進(jìn)行消息傳遞通信,組件間通信大體有下面幾種情況父組件向子組件通信子組件向父組件通信非嵌套組件間通信跨級(jí)組件之間通信父組件向子組件通信父組件通過向子組件傳遞,子組件得到后進(jìn)行相應(yīng)的處理。
在使用 React 的過程中,不可避免的需要組件間進(jìn)行消息傳遞(通信),組件間通信大體有下面幾種情況:
父組件向子組件通信
子組件向父組件通信
非嵌套組件間通信
跨級(jí)組件之間通信
1.父組件向子組件通信
父組件通過向子組件傳遞 props,子組件得到 props 后進(jìn)行相應(yīng)的處理。
演示代碼:
父組件 parent.js:
import React,{ Component } from "react"; export default class App extends Component{ render(){ return() } } 子組件 child.js:
import React from "react";
class Child extends React.component{
construtor(props){ super(props) this.state = {} } render(){ return({ props.title}
) }
}
export default Child;
**2.子組件向父組件通信** 利用回調(diào)函數(shù),實(shí)現(xiàn)子組件向父組件通信:父組件將一個(gè)函數(shù)作為 props 傳遞給子組件,子組件調(diào)用該回調(diào)函數(shù).即可 演示代碼: child.js
import React from "react";
class Child extends React.component{
construtor(props){ super(props) this.state = {} } cb = (msg) => { this.props.callback(msg); } render(){ return() }
}
export default Child;
app.js
import React from "react";
export default class App extends React.Component{
callback(msg){ console.log(msg); } render(){ return() }
}
**3.非嵌套組件間通信** 非嵌套組件,就是沒有任何包含關(guān)系的組件,包括兄弟組件以及不在同一個(gè)父級(jí)中的非兄弟組件 首先需要引入一個(gè)包events
npm install events --save
新建ev.js文件,引入 events 包,并向外提供一個(gè)事件對(duì)象,供通信時(shí)使用
import { EventEmitter } from "events";
export default new EventEmitter();
app.js
import React, { Component } from "react";
import childA from "./childA ";
import childB from "./childB";
export default class App extends Component{
render(){ return(); }
}
childA
import React,{ Component } from "react";
import emitter from "./ev"
export default class ChildA extends Component{
constructor(props) { super(props); this.state = { msg:null, }; } componentDidMount(){ // 聲明一個(gè)自定義事件 // 在組件裝載完成以后 this.eventEmitter = emitter.addListener("callMe",(msg)=>{ this.setState({ msg }) }); } // 組件銷毀前移除事件監(jiān)聽 componentWillUnmount(){ emitter.removeListener(this.eventEmitter); } render(){ return({ this.state.msg } child a); }
}
childB:
import React,{ Component } from "react";
import emitter from "./ev"
export default class ChildB extends Component{
render(){ const cb = (msg) => { return () => { // 觸發(fā)自定義事件 emitter.emit("callMe","test") } } return(childB); }
}
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/98273.html
摘要:在使用的過程中,不可避免的需要組件間進(jìn)行消息傳遞通信,組件間通信大體有下面幾種情況父組件向子組件通信子組件向父組件通信非嵌套組件間通信跨級(jí)組件之間通信父組件向子組件通信父組件通過向子組件傳遞,子組件得到后進(jìn)行相應(yīng)的處理。 在使用 React 的過程中,不可避免的需要組件間進(jìn)行消息傳遞(通信),組件間通信大體有下面幾種情況: 父組件向子組件通信 子組件向父組件通信 非嵌套組件間通信 跨...
摘要:首次發(fā)表在個(gè)人博客需要組件之進(jìn)行通信的幾種情況父組件向子組件通信子組件向父組件通信跨級(jí)組件通信沒有嵌套關(guān)系組件之間的通信父組件向子組件通信數(shù)據(jù)流動(dòng)是單向的父組件向子組件通信也是最常見的父組件通過向子組件傳遞需要的信息子組件向父組件通信利用 showImg(https://segmentfault.com/img/remote/1460000012361466?w=1240&h=667)...
摘要:父組件聲明自己支持父組件提供一個(gè)函數(shù),用來返回相應(yīng)的對(duì)象子組件聲明自己需要使用我胡漢三又回來了點(diǎn)擊我如果是父組件向子組件單向通信,可以使用變量,如果子組件想向父組件通信,同樣可以由父組件提供一個(gè)回調(diào)函數(shù),供子組件調(diào)用,回傳參數(shù)。 在使用 React 的過程中,不可避免的需要組件間進(jìn)行消息傳遞(通信),組件間通信大體有下面幾種情況: 父組件向子組件通信 子組件向父組件通信 跨級(jí)組件之間...
摘要:父子組件通信父子間通信的幾種情況父組件向子組件通信子組件向父組件通信跨級(jí)組件通信兄弟組件通信父組件向子組件通信由于是單向數(shù)據(jù)流向的,父組件一般通過向子組件傳遞相關(guān)的一些信息來看一下下面這個(gè)例子,在這里我封裝了一個(gè)組件,它的顯示與取消的狀態(tài)交 react父子組件通信 react父子間通信的幾種情況 父組件向子組件通信 子組件向父組件通信 跨級(jí)組件通信 兄弟組件通信 父組件向子組件通信...
摘要:子組件向父組件通信方法一使用事件父組件向子組件傳遞事件方法,子組件通過觸發(fā)事件,回調(diào)給父組件。非父子組件兄弟組件之間的數(shù)據(jù)傳遞非父子組件通信,官方推薦使用一個(gè)實(shí)例作為中央事件總線。 寫在前面 因?yàn)閷?duì)Vue.js很感興趣,而且平時(shí)工作的技術(shù)棧也是Vue.js,這幾個(gè)月花了些時(shí)間研究學(xué)習(xí)了一下Vue.js源碼,并做了總結(jié)與輸出。 文章的原地址:https://github.com/answ...
閱讀 2613·2021-09-26 10:17
閱讀 3236·2021-09-22 15:16
閱讀 2145·2021-09-03 10:43
閱讀 3270·2019-08-30 11:23
閱讀 3667·2019-08-29 13:23
閱讀 1315·2019-08-29 11:31
閱讀 3699·2019-08-26 13:52
閱讀 1404·2019-08-26 12:22