最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React父子組件間的通信是怎樣進(jìn)行的

 更新時(shí)間:2023年03月14日 09:14:16   作者:旺仔好吃糖  
這篇文章主要介紹了React中父子組件通信詳解,在父組件中,為子組件添加屬性數(shù)據(jù),即可實(shí)現(xiàn)父組件向子組件通信,文章通過(guò)圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

父子組件通信方式

(1)傳遞數(shù)據(jù)(父?jìng)髯樱┡c傳遞方法(子傳父)

(2)ref標(biāo)記(父組件拿到子組件的引用,從而調(diào)用子組件的方法)

父?jìng)髯?/h3>

使用 props屬性,傳入props

this.props.數(shù)據(jù)

//父組件
 <Field label="用戶名"></Field>
//子組件
 <label>{this.props.label}</label>

子傳父

父組件向子組件傳一個(gè)函數(shù),然后通過(guò)子組件中這個(gè)函數(shù)的回調(diào),拿到子組件穿過(guò)的值

this.props.函數(shù)名()

//子組件
<input onChange={(evt)=>{
   this.props.onChangeEvent(evt.target.value)
}}></input>
//父組件
 <Field onChangeEvent={(value)=>{
    console.log(value)
 }}></Field>

ref標(biāo)記(傳遞數(shù)據(jù))

在組件身上綁定ref,直接通過(guò) this.username.current 獲得整個(gè)組件,this.username.current.state獲得子組件內(nèi)state數(shù)據(jù)

this.ref名.current

//子組件中
 state={
     value:''
 }
 <input onChange={(evt)=>{
   this.setState({
       value:evt.target.value
   })
}}></input>
//父組件
username = React.createRef()
<Field ref={this.username}></Filed>
....
console.log(this.username.current.state.value)

??????父組件中清除子組件的值:在子組件中定義修改state函數(shù),父組件中調(diào)用此函數(shù)來(lái)實(shí)現(xiàn)

clear(){
    this.setState({
        value:''
    })
}
 <input value={this.state.value}></input>
....................
this.username.current.clear()//父

非父子組件通信方式

狀態(tài)提升(兄弟通信)

React中的狀態(tài)提升概括來(lái)說(shuō),就是將多個(gè)組件需要共享的狀態(tài)提升到它們最近的父組件上,在父組件上改變這個(gè)狀態(tài)然后通過(guò)props分發(fā)給子組件

發(fā)布訂閱模式

兄弟組件AB,子組件A將值傳給B組件,在子組件A中發(fā)布,在子組件B中訂閱,,此方法適合任意關(guān)系的通信

調(diào)度中心bus:

var bus={
	list:[],//放入所有的訂閱
	//訂閱
    subscribe(callback){
         this.list.push(callback)
        //callback為注冊(cè)訂閱的回調(diào)函數(shù)
    }
	//發(fā)布
	publish(){
    }
}

1.訂閱消息

//創(chuàng)建訂閱的回調(diào)函數(shù)
subscribe(callback){
   console.log(callback);
   this.list.push(callback)
}
//訂閱者
bus.subscribe((value)=>{
    console.log(111,value);
})
bus.subscribe((value)=>{
    console.log(222,value);
})

2.發(fā)布消息

//創(chuàng)建bus(調(diào)度中心)中的發(fā)布函數(shù)
publish(text){
        //遍歷所有的list,將回調(diào)函數(shù)執(zhí)行
        // console.log(this.list);
        this.list.forEach(callback=>{
            callback && callback(text)
        })
    }
//發(fā)布者
setTimeout(()=>{
    bus.publish('沉默')
},0)

bus.publish調(diào)用時(shí),傳入?yún)?shù),觸發(fā)bus中publish函數(shù)并接收到數(shù)據(jù)即text,調(diào)用callback回調(diào)函數(shù),傳入text,此時(shí)調(diào)用者subscribe將收到參數(shù)為value,即將組件A數(shù)據(jù)傳入組件B中

context狀態(tài)樹(shù)傳參(跨組件方案)

Context 提供了一種在組件之間共享此類值的方式,是“全局”的數(shù)據(jù),而不必顯式地通過(guò)組件樹(shù)的逐層傳遞 props。

context上下文對(duì)象來(lái)管理公共狀態(tài),來(lái)實(shí)現(xiàn)數(shù)據(jù)的修改

1.創(chuàng)建context對(duì)象

const GlobalContext = React.createContext()

2.創(chuàng)建提供數(shù)據(jù)的父組件Provider

給Provider組件設(shè)置value屬性,需要傳遞到后代組件中的數(shù)據(jù)作為value的值

當(dāng)Provider發(fā)生數(shù)據(jù)value變更時(shí),會(huì)觸發(fā)到Consumer發(fā)生渲染,所有被其包裹的子組件都會(huì)發(fā)生渲染(render被調(diào)用)

//格式
state={
    info:'111'
}
render(){
    return(
        <GlobalContext.Provider value={{
        	//key:value或key:函數(shù)
        }}>
        	<div>父組件內(nèi)容</div>
        </GlobalContext.Provider>
    )
}

3.創(chuàng)建接受數(shù)據(jù)的子孫組件Consumer

//格式
render(){
     return(
       <GlobalContext.Consumer>
        {
            (value)=>{
                return(
                    <div onClick={()=>{
                       
                      }}>
                    </div>
                )
            }
        }
       </GlobalContext.Consumer>
    )
}

4.在子孫組件A中調(diào)用Provider中的回調(diào)函數(shù)

某些時(shí)候需要內(nèi)部組件去更新Context的數(shù)據(jù),只需要向上下文添加回調(diào)函數(shù)即可

//子組件A中  調(diào)用回調(diào)函數(shù),傳遞數(shù)據(jù)
value.chageInfo(synopsis)
//父組件
state={
        info:111
}
......................................
<GlobalContext.Provider value={{
     "name":"說(shuō)名字",
     "info":this.state.info,
     chageInfo:(content)=>{
         this.setState({
             info:content
         })
     }
}}>

全局定義狀態(tài),并修改狀態(tài)

5.子孫組件B中接收Provider的數(shù)據(jù)

 <GlobalContext.Consumer>
        {
            (value)=><div className="filmDetail">
                //接受Provider的數(shù)據(jù)
                    detail-{value.info}
                </div>
        }
 </GlobalContext.Consumer>

實(shí)現(xiàn)了將組件A的值傳給了組件B的值

React插槽

作用:為了復(fù)用;一定程度減少父子通信

children實(shí)現(xiàn)插槽

在React組件中直接包裹一些html標(biāo)簽,html標(biāo)簽內(nèi)容是否會(huì)出現(xiàn)呢?

<Child>
    <div>111</div>
    <div>22</div>
    <div>333</div>
</Child>

由上圖可見(jiàn),被包裹的html標(biāo)簽并未被渲染出來(lái),這是因?yàn)楫?dāng)讀取到Child組件時(shí),會(huì)重新渲染頁(yè)面覆蓋被包裹的html標(biāo)簽;而我們可以在Child組件中留下html標(biāo)簽的位置,以便來(lái)顯示被包裹的html,這種做法即為 插槽

語(yǔ)法

使用props的固定屬性children在Child組件中占位

this.props.children
//該屬性中包含子組件標(biāo)簽開(kāi)始到結(jié)束之間的內(nèi)容

父組件的子組件標(biāo)簽中寫(xiě)入要插入到子組件的html標(biāo)簽

export default class App extends Component {
  render() {
    return (
      <div>
        <Child>
            <div>111</div>
            <div>22</div>
            <div>333</div>
        </Child>
      </div>
    )
  }
}

在子組件中放入該標(biāo)簽

class Child extends Component{
    render(){
        return(
            <div>
                child
                 {this.props.children}
            </div>
        )
    }
}

多個(gè)元素的children

如果children中有多個(gè)元素,那么children為一個(gè)數(shù)組,數(shù)組中放著所有存放的內(nèi)容

//父組件
<Child>
            <div>111</div>
            <div>22</div>
            <div>333</div>
</Child>
//子組件
<div>
    child
    <h3>以下獲得所有內(nèi)容</h3>
     {this.props.children}
     <h3>以下獲得數(shù)組其中的元素</h3>
     {this.props.children[1]}
</div>

注意:以上方法實(shí)現(xiàn)了 可以通過(guò)被 插槽的內(nèi)容來(lái)直接操作父組件,以此給子組件傳遞數(shù)據(jù)(被 插入的內(nèi)容連同數(shù)據(jù)一起插入子組件中)

到此這篇關(guān)于React父子組件間的通信是怎樣進(jìn)行的的文章就介紹到這了,更多相關(guān)React組件通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React 使用Hooks簡(jiǎn)化受控組件的狀態(tài)綁定

    React 使用Hooks簡(jiǎn)化受控組件的狀態(tài)綁定

    這篇文章主要介紹了React 使用Hooks簡(jiǎn)化受控組件的狀態(tài)綁定,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • react ant design樣式覆蓋問(wèn)題

    react ant design樣式覆蓋問(wèn)題

    這篇文章主要介紹了react ant design樣式覆蓋問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • React Native提供自動(dòng)完成的下拉菜單的方法示例

    React Native提供自動(dòng)完成的下拉菜單的方法示例

    這篇文章主要為大家介紹了React Native提供自動(dòng)完成的下拉菜單的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • vite?+?react?+typescript?環(huán)境搭建小白入門(mén)教程

    vite?+?react?+typescript?環(huán)境搭建小白入門(mén)教程

    這篇文章主要介紹了vite?+?react?+typescript?環(huán)境搭建小白入門(mén)教程,本文通過(guò)示例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • React中的useEffect四種用法分享

    React中的useEffect四種用法分享

    這篇文章主要給大家分享React中的useEffect四種用法,useEffect中 觸發(fā)更新,重復(fù)的 useEffect,依賴值觸發(fā)回調(diào),useEffect 的返回值,通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • React過(guò)渡動(dòng)畫(huà)組件基礎(chǔ)使用介紹

    React過(guò)渡動(dòng)畫(huà)組件基礎(chǔ)使用介紹

    在開(kāi)發(fā)中,我們想要給一個(gè)組件的顯示和消失添加某種過(guò)渡動(dòng)畫(huà),可以很好的增加用戶體驗(yàn)。 當(dāng)然,我們可以通過(guò)原生的CSS來(lái)實(shí)現(xiàn)這些過(guò)渡動(dòng)畫(huà),這篇文章主要介紹了React過(guò)渡動(dòng)畫(huà)組件使用
    2022-09-09
  • React引入antd-mobile+postcss搭建移動(dòng)端

    React引入antd-mobile+postcss搭建移動(dòng)端

    本文給大家分享React引入antd-mobile+postcss搭建移動(dòng)端的詳細(xì)流程,文末給大家分享我的一些經(jīng)驗(yàn)記錄使用antd-mobile時(shí)發(fā)現(xiàn)我之前配置的postcss失效了,防止大家踩坑,特此把解決方案分享到腳本之家平臺(tái),需要的朋友參考下吧
    2021-06-06
  • 詳細(xì)談?wù)凴eact中setState是一個(gè)宏任務(wù)還是微任務(wù)

    詳細(xì)談?wù)凴eact中setState是一個(gè)宏任務(wù)還是微任務(wù)

    學(xué)過(guò)react的人都知道,setState在react里是一個(gè)很重要的方法,使用它可以更新我們數(shù)據(jù)的狀態(tài),下面這篇文章主要給大家介紹了關(guān)于React中setState是一個(gè)宏任務(wù)還是微任務(wù)的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • antd之RangePicker設(shè)置默認(rèn)值方式

    antd之RangePicker設(shè)置默認(rèn)值方式

    這篇文章主要介紹了antd之RangePicker設(shè)置默認(rèn)值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • React 事件綁定的實(shí)現(xiàn)及區(qū)別

    React 事件綁定的實(shí)現(xiàn)及區(qū)別

    事件綁定也是其中一部分內(nèi)容,通過(guò)事件委托和事件合成,React 在內(nèi)部對(duì)事件進(jìn)行優(yōu)化和處理,減少了事件處理函數(shù)的調(diào)用次數(shù),從而提升了性能,本文主要介紹了React事件綁定的實(shí)現(xiàn)及區(qū)別,感興趣的可以了解一下
    2024-03-03

最新評(píng)論

新宁县| 临汾市| 六枝特区| 徐汇区| 平舆县| 潜江市| 曲阳县| 敖汉旗| 古浪县| 望奎县| 拉孜县| 桂林市| 西青区| 灵山县| 柳河县| 乌苏市| 临颍县| 亚东县| 泸西县| 宜兴市| 齐齐哈尔市| 青岛市| 临清市| 麻江县| 齐齐哈尔市| 琼中| 永丰县| 青海省| 长武县| 宁阳县| 苏尼特右旗| 洛宁县| 黎平县| 三门县| 博爱县| 海盐县| 潜江市| 江永县| 连平县| 增城市| 杭锦后旗|