中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

react中組件通信的示例分析

發布時間:2021-10-15 10:23:14 來源:億速云 閱讀:164 作者:小新 欄目:開發技術

小編給大家分享一下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來實現

祖先子孫

  1. 定義store類 導出createContext中的Provider,COnsumer

  2. 在祖先節點中發布消息: Provider value=任意數據

  3. 在子孫節點中訂閱: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中組件通信的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

益阳市| 凯里市| 册亨县| 高平市| 明溪县| 桑植县| 和龙市| 沂源县| 杭锦后旗| 商都县| 定襄县| 长武县| 惠东县| 南京市| 华容县| 曲周县| 纳雍县| 屏边| 杭锦旗| 孝感市| 盐山县| 光泽县| 冕宁县| 崇仁县| 潞西市| 舟曲县| 松滋市| 涿州市| 新昌县| 武宁县| 舟山市| 徐州市| 保靖县| 南昌县| 儋州市| 青川县| 安多县| 株洲县| 本溪市| 崇礼县| 横峰县|