詳解react組件通訊方式(多種)
1、父組件向子組件傳值
父組件向子組件傳值一般采用props屬性傳遞
父組件:
import React from 'react' import Child from './Child' const dataList = [ { id: '001', value: '張三' }, { id: '002', value: '李四' } ] const Parent = props => { return ( <ul> <Child dataList={dataList}></Child> </ul> ) } export default Parent
子組件:
import React from 'react' const Child = props => { return ( <React.Fragment> { props.dataList.map(item => <li key={item.id}>{item.value}</li>) } </React.Fragment> ) } export default Child
2、子組件向父組件傳值
子組件調(diào)用父組件傳過來的回調(diào)函數(shù)來更改父組件的state
父組件
import React, { useState } from 'react' import Child from './Child' const Parent = props => { const [count, setCount] = useState(0) return ( <Child count={count} setCount={setCount}></Child> ) } export default Parent
子組件
import React from 'react' const Child = props => { return ( <React.Fragment> <button onClick={() => {props.setCount(props.count-1)}}>-</button> <span>{props.count}</span> <button onClick={() => {props.setCount(props.count+1)}}>+</button> </React.Fragment> ) } export default Child
3、跨級(jí)組件傳值(祖孫組件)
context是一個(gè)全局變量,像是一個(gè)大容器,在任何地方都可以訪問到,我們可以把要通信的信息放在context上,然后在其他組件中可以隨意取到;
但是React官方不建議使用大量context,盡管他可以減少逐層傳遞,但是當(dāng)組件結(jié)構(gòu)復(fù)雜的時(shí)候,我們并不知道context是從哪里傳過來的;而且context是一個(gè)全局變量,全局變量正是導(dǎo)致應(yīng)用走向混亂的罪魁禍?zhǔn)?
父組件
import React, { useState } from 'react' import Child from './Child' export const MyContext = React.createContext('hello') const Parent = props => { return ( <MyContext.Provider value="world"> <Child /> </MyContext.Provider> ) } export default Parent
子組件
import React from 'react' import Son from './Son' const Child = props => { return ( <Son /> ) } export default Child
孫組件
import React from 'react' import { MyContext } from './Parent' export default class Son extends React.Component { render() { return ( <MyContext.Consumer> { context => <div>{context}</div> } </MyContext.Consumer> ) } }
參考:
https://blog.csdn.net/xingfuzhijianxia/article/details/86151243
https://www.cnblogs.com/qinney1109/p/11202085.html
到此這篇關(guān)于詳解react組件通訊方式的文章就介紹到這了,更多相關(guān)react組件通訊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
react-navigation之動(dòng)態(tài)修改title的內(nèi)容
這篇文章主要介紹了react-navigation之動(dòng)態(tài)修改title的內(nèi)容,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09ReactJS實(shí)現(xiàn)表單的單選多選和反選的示例
本篇文章主要介紹了ReactJS實(shí)現(xiàn)表單的單選多選和反選的示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-10-10React+CSS?實(shí)現(xiàn)繪制豎狀柱狀圖
這篇文章主要介紹了React+CSS?實(shí)現(xiàn)繪制豎狀柱狀圖,文章圍繞主題展開詳細(xì)的內(nèi)容介紹。具有一定的參考價(jià)值,需要的朋友可以參考一下2022-09-09Webpack3+React16代碼分割的實(shí)現(xiàn)
這篇文章主要介紹了Webpack3+React16代碼分割的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03React+Spring實(shí)現(xiàn)跨域問題的完美解決方法
這篇文章主要介紹了React+Spring實(shí)現(xiàn)跨域問題的完美解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08React學(xué)習(xí)之JSX與react事件實(shí)例分析
這篇文章主要介紹了React學(xué)習(xí)之JSX與react事件,結(jié)合實(shí)例形式分析了React中JSX表達(dá)式、屬性、嵌套與react事件相關(guān)使用技巧,需要的朋友可以參考下2020-01-01React?中的?JS?報(bào)錯(cuò)及容錯(cuò)方案
這篇文章主要為大家介紹了React?中的?JS?報(bào)錯(cuò)及容錯(cuò)方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08