您好,登錄后才能下訂單哦!
小編給大家分享一下react中組件通信的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
父組件將自己的狀態傳遞給子組件,子組件當做屬性來接收,當父組件更改自己狀態的時候,子組件接收到的屬性就會發生改變
父組件利用ref對子組件做標記,通過調用子組件的方法以更改子組件的狀態,也可以調用子組件的方法
父組中定義ref引用
import React,{Component,createRef} from 'react' import Child1 from './Child1' export default class App extends Component { constructor(props){ super(props) this.child=createRef() } render(){ return( <div> <Child1 ref={this.child}/> <button onClick={this.fn.bind(this)}></button> </div> ) } fn(){ const child=this.child.current child.setTitle() } }
子組件定義好數據源和修改數據源方法
import React,{Component} from 'react' export default class Child1 extends Component{ state={ title:'標題' } render(){ return ( <div> {this.state.title} </div> ) } setTitle(){ this.setstate({title:'hh'}) } }
父組件將自己的某個方法傳遞給子組件,在方法里可以做任意操作,比如可以更改狀態,子組件通過this.props
接收到父組件的方法后調用。
在react沒有類似vue中的事件總線來解決這個問題,一是我們借助它們共同的父級組件通過代理的方式來實現,但過程會相當繁鎖。react提供了Context來實現跨組件通信, 而不必顯式地通過組件樹的逐層傳遞 props。
復雜的非父子組件通信在react中很難處理,多組件間的數據共享也不好處理,在實際的工作中我們會使用flux、redux、mobx來實現
定義store類 導出createContext中的Provider,COnsumer
在祖先節點中發布消息: Provider value=任意數據
在子孫節點中訂閱:Consumer 回調函數{value=>(組件)}
1.定義數據源store
store.js
import React , {createContext} from 'react' let {Provider,Consumer} = createContext() export { Provider,//發布 Consumer//訂閱 }
2.祖先節點
import React ,{Component} from 'react' import {Provider,Consumer} from './store' import Son from './Son' export default class App extends Component{ constructor(props){ super(props) this.state={ name:'mingcen' } } render(){ return ( <div> <Provider value={this.state.name}> <Son/> </Provider> </div> ) } }
3.后代節點
import React,{Component} from'react' import {Consumer} from './store' export default class Son1 extends Component{ constructor(props){ super(props) this.state={ name:'uuu' } } render(){ return( <div> <Consumer> { value=>{ <div>{value.name}</div> } } </Consumer> </div> ) } }
一個子物體掛在事件
另一個掛在屬性
通過實踐改變屬性,來改變另一個組件接受的內容
祖先
state={ count:1, setCount:()=>{ this.setState(state=>{ return{ count:++state.count } }) } } render(){ let {count,setCount} = this.state return( <div> <Provider value={{count,setCount}}> <Cmp1></Cmp1> <Cmp2></Cmp2> </Provider> </div> ) }
兄弟Cmp2
import React, { Component ,createContext} from 'react' export default class Cmp2 extends Component { // 只得到了默認數據 --> 沒有包裹在Provider組件中 static contextType = createContext render() { return ( <div> <button onClick={this.setCount.bind(this)}>自增數據</button> </div> ) } setCount() { this.context.setCount() } }
兄弟Cmp1
<Consumer> { value => <h4>{value.count}</h4> } </Consumer>
看完了這篇文章,相信你對“react中組件通信的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。