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