1. 程式人生 > >React 元件間通訊

React 元件間通訊

在經歷了許多的html+css+js的傳統網頁製作之後,最近開始上手react了。學了一點語法之後就開始了react的專案,
然而事情不總是一帆風順的。剛上手的時候,專案的進度就是一團糟。各種迷之bug紛至沓來,在這裡真的要提醒諸位,在寫react es6語法的時候,html結構中的dom事件千萬要注意大小寫,比如html結構中的onclick事件,這個在html頁面中是這樣寫的,然而在es6裡面就只能用onClick了,否則會影響元件的生成。
好了,話不多說,我們進入正題。
react相鄰元件間是怎麼通訊的?大家應該都知道react在生成元件以後只有setState方法能引起元件重新渲染,然而在相鄰元件之間,同級元件是不可能影響到另一個元件的setState方法的。也就是說,如果我要實現qq登入(安卓端)的效果(修改賬號同時修改頭像),就目前來看是不可能的。
為此,react給我們提供了一個方法:

狀態提升
原理很簡單,就是將同級的需要相互通訊的元件寫到一個父元件中,然後給兩個子元件分別傳遞不同的引數,包括改變State的函式和State中改變的屬性。
換句話說,就是重新渲染父元件以達到我們想要的效果。

//子元件1
//頭像url預設為user.png,只要輸入了uid,則獲取當前使用者的頭像url,並更新這個元件
export class UserAvatar extends Component{
    constructor(props){
        super(props);
    }

    componentDidMount(){
        console.log(this
.props.imageurl); console.log("avatar init") } //下面接收父元件傳遞過來的State引數 render() { return ( <div className="avatar-wrapper"> <img src={this.props.imageurl} alt="頭像" /> </div> ) } } //子元件2 export class Login extends
Component{
constructor(props){ super(props); } componentDidMount(){ console.log(this.props.changeAva); console.log("login init"); } //下面接收改變狀態的函式方法 render(){ return( <div className="login-wrapper"> <div className="text-input-wrapper"> <img src={account_icon} alt="account"/> <input type="text" className="text-input" maxlength="10" onBlur={this.props.changeAva.bind(this)}/> </div> <div className="text-input-wrapper"> <img src={password_icon} alt="password"/> <input type="text" className="text-input" maxlength="10"/> </div> <div className="button-wrapper"> <input type="button" value="登入" onClick={this.onLogin.bind(this)}/> </div> <div className="forget-password-wrapper"><a href="#!">忘記密碼?</a></div> </div> ) } onLogin(){ alert("申請授權中,請耐心等待"); } } //父元件 export class LoginAvatar extends Component{ constructor(){ super(); this.state={ imageUrl:"../../resource/images/avatar/user.png" }; } //改變狀態的方法在父元件中定義 changeAvatar(){ this.setState({ imageUrl:"../../resource/images/avatar/1262283870/avatar.jpg" }) } render(){ return( <div className="main-login-wrapper"> <UserAvatar imageurl={this.state.imageUrl}/> <Login changeAva={this.changeAvatar.bind(this)}/> </div> ) } }

簡單來說,就是父元件呼叫子元件時,給子元件傳遞相應的引數,一個用於顯示,一個使用者重新渲染。這就是所謂的狀態提升,也因此我們能實現元件間的通訊。

個人理解,如若有誤,還請不吝賜教。

相關推薦

解密傳統元件通訊React元件通訊

在React中最小的邏輯單元是元件,元件之間如果有耦合關係就會進行通訊,本文將會介紹React中的元件通訊的不同方式 通過歸納範,可以將任意元件間的通訊歸類為四種類型的元件間通訊,分別是父子元件,爺孫元件,兄弟元件和任意元件,需要注意的是前三個也可以算作任意元件的範

React元件通訊(父=>子)(子=>父)(子=>爺)(刪除指定下標的資料)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-

React 元件通訊

在經歷了許多的html+css+js的傳統網頁製作之後,最近開始上手react了。學了一點語法之後就開始了react的專案, 然而事情不總是一帆風順的。剛上手的時候,專案的進度就是一團糟。各種迷之bug紛至沓來,在這裡真的要提醒諸位,在寫react es6語法

【轉】React 元件通訊

原文連結 說 React 元件間通訊之前,我們先來討論一下 React 元件究竟有多少種層級間的關係。假設我們開發的專案是一個純 React 的專案,那我們專案應該有如下類似的關係: 父子:Parent 與 Child_1、Child_2、Ch

React 元件通訊

在使用 React 的過程中,不可避免的需要元件間進行訊息傳遞(通訊),元件間通訊大體有下面幾種情況: 父元件向子元件通訊 子元件向父元件通訊 跨級元件之間通訊 非巢狀元件間通訊 下面依次說下這幾種通訊方式。 父元件向子元件通訊 這是最簡單也是最常用的一種

React】歸納篇(十)元件通訊方式之Redux | UI元件AntDesign | Redux-react

react-router4 react-router概覽 1、react的一個外掛庫 2、專門用於實現一個SPA應用 3、基於react的專案都會用到該庫 SPA 1、點選頁面中的連結不會重新整理頁面,本身也不會向伺服器傳送請求 2、點選路由連結時,只會發

react系列(三)元件通訊

元件間通訊 React的基本元件元素是一個個元件,元件之間可能存在關聯、組合等關係。不同的元件之間,經常會發生資料傳遞或者交換,我們稱之為元件間通訊。 根據傳遞的複雜程度,可以分為三種情況: 父子間通訊,兄弟間通訊,同其他外部庫通訊。 父子間通訊 在學習元件的時候,props是輸入,元件是輸出。在這裡的pro

React+Reflux 實現元件通訊

       寫這篇文章,不是把官方的例子或者github的例子給大家敲一遍,而是想把自己學習遇到的問題重點突出,讓大家少走彎路。        首先,學習這篇文章的時候,需要有React基礎,本文分為兩部分主要講解Reflux,第一部分給出其基本原理,第二部分給出一個我認

2018年11月08日 關於Vue的父子通訊 and 子父通訊 and 任意及平行元件通訊的學習

1、父子通訊 //在html中的相關程式碼 <body> <div id="app"> <alert change_alert="再見"></alert> //如果我們想要點選按鈕的時候彈出的內容時change_alert中的“再

Android Service、IntentService,Service和元件通訊

Service元件 Service 和Activity 一樣同為Android 的四大元件之一,並且他們都有各自的生命週期,要想掌握Service 的用法,那就要了解Service 的生命週期有哪些方法,並且生命週期中各個方法回撥的時機和作用 什麼是service?service的基本概念 Servic

Vue.js元件通訊方式總結

  平時在使用Vue框架的業務開發中,元件不僅僅要把模板的內容進行復用,更重要的是元件之間要進行通訊。元件之間通訊分為三種:父-子;子-父;跨級元件通訊。下面,就元件間如何通訊做一些總結。 1.父元件到子元件通過props通訊 在元件中,使用選項props來宣告需要從父級元件接受的資料,props的值可以

vue - 元件通訊2

父元件--> 子元件 1. 屬性設定 父元件關鍵程式碼如下: <template> <Child :child-msg="msg"></Child> </template> 子元件關鍵程式碼如下: export de

vue-元件通訊

1、在vue中父元件是通過props傳遞資料給子元件 <child-component :prop1="父元件的資料1" :prop2="父元件的資料2"></child-component> 子元件只接受在子元件中定義過的props的值, V

聊聊Vue.js元件通訊的幾種姿勢

寫在前面 因為對Vue.js很感興趣,而且平時工作的技術棧也是Vue.js,這幾個月花了些時間研究學習了一下Vue.js原始碼,並做了總結與輸出。 文章的原地址:https://github.com/answershuto/learnVue。 在學習過程中,為Vue加上了中文的註釋htt

Vue之父子元件通訊例項講解(props、$ref、$emit)

元件是 vue.js 最強大的功能之一,而元件例項的作用域是相互獨立的,這就意味著不同元件之間的資料無法相互引用。那麼元件間如何通訊,也就成為了vue中重點知識了。這篇文章將會通過props、$ref和 $emit 這幾個知識點,來講解如何實現父子元件間通訊。   在說如何實現通訊

vue 元件通訊 PubSub 釋出訂閱

很長一段時間在vue開發專案中元件間通訊都是通過vuex實現的,有時候開發一個小專案也要用到插入笨重的vuex來實現元件間互動,有沒有一個好的外掛可以替代vuex,emmmm~,當然有了!今天給大家介紹一下PubSubJS,PubSubJS是什麼?可以實現什麼功能?看下面的例子實現關閉彈窗m

說說在 Vue.js 中如何實現元件通訊

1 用法 假設父元件的模板包含子元件,我們可以通過 props 來正向地把資料從父元件傳遞給子元件。props 可以是字串陣列,也可以是物件。 html: <div id="app"> <deniro-component message=""嫦娥四號"成功發射

說說在 Vue.js 中如何實現元件通訊(高階篇)

之前說過,可以使用 props 將資料從父元件傳遞給子元件。其實還有其它種的通訊方式,下面我們一一娓娓道來。 1 自定義事件 通過自定義事件,我們可以把資料從子元件傳輸回父元件。子元件通過 $emit() 來觸發事件,而父元件通過 $on() 來監聽事件,這是典型的觀察者模式。 htm

React元件資訊傳遞方式

父傳子 父元件定義一個 name get constructor(props) { super(props) this.state = { name: "小明", get:1

vue元件通訊用例

父元件傳值給子元件 -- 以封裝公用slide元件為例 父元件 <template> <section class="banner"> <slide :imgList="imgList" :options="swiperOption" width="100%" h