【React】React入门--组件间的通信
创始人
2024-05-29 02:33:27
0

🎀个人主页:努力学习前端知识的小羊
感谢你们的支持:收藏🎄 点赞🍬 加关注🪐

组件间通信

    • 父子组间通信
      • 1.父传子
      • 2.子传父
      • 3.ref
    • 非父子组件通信
      • 1.状态提升(中间人状态)
      • 2.发布订阅模式
      • 3.context状态树传参
    • React插槽

父子组间通信

1.父传子

props
父组件向子组件传递props,子组件通过参数接受props值

//父组件
//子组件
this.props.type}>

2.子传父

通过回调函数 callback

//子组件
//父组件
handleEvent=()=>{this.setState({isshow:!this.state.isshow})console.log("父组件的event函数");}render() {return (
this.handleEvent}/>
)}

3.ref

子组件设置ref属性,父组件通过this.ref名称.current来获取到子组件的数据来进行调用

//子组件
state={value:''}
render(){return (evt)=>{this.setState({value:evt.target.value})}}>
}//父组件
username = React.createRef()
password = React.createRef()render() {return (
//给子组件绑定refthis.username}/>this.password}/>
)}

非父子组件通信

1.状态提升(中间人状态)

React中的状态提升概括来说,就是将多个组件需要共享的状态提升到他们最近的父组件上,在父组件上改变这个状态然后通过props分发给子组件。

//父组件
render() {return (
{this.state.filmlist.map(item =>item.filmId} {...item}onEvent={(value)=>{this.setState({info:value})}}>)}this.state.info}>
)}//子组件 class FilmItem extends Component{render(){ let {name,poster,synopsis,grade} = this.propsreturn
()=>{this.props.onEvent(synopsis)}}> poster} alt={name}/>

{name}

观众评分:{grade}
} }class Film_detail extends Component{render(){return
{this.props.info}
} }

2.发布订阅模式

存在一个调度中心bus,此方法适用于任何组件之间的通信
调度中心bus

var bus = {list:[],// 订阅subscribe(callback){// console.log();this.list.push(callback)},// 发布publish(text){this.list.forEach(callback=>{callback && callback(text)})}
}

订阅消息

//创建订阅的回调函数
subscribe(callback){// console.log();this.list.push(callback)},
// 订阅者bus.subscribe((value)=>{console.log('1111',value);
})bus.subscribe((value)=>{console.log("22222",value);
})

发布消息

// 创建bus的中的发布函数publish(text){this.list.forEach(callback=>{callback && callback(text)})}// 发布者
setTimeout(()=>{bus.publish("111")
},0)
setTimeout(()=>{bus.publish("222")
},1000)
setTimeout(()=>{bus.publish("333")
},2000)

bus.publish调用时,传入参数,触发bus中publish函数并接收到数据即text,调用callback回调函数,传入text,此时调用者subscribe将收到参数为value,即将组件A数据传入组件B中

3.context状态树传参

先创建context对象

const GlobalContext = React.createContext() //创建context对象

根组件引入GlobalContext,并使用GlobalContext.Provider(生产者)

{call:"打电话",sms:"短信",info:this.state.info,changeInfo:(value)=>{this.setState({info:value})}}}>
{this.state.filmlist.map(item =>item.filmId} {...item}>)}

其他组件引入GlobalContext并调用context,使用GlobalContext.Consumer

//组件1
{(value)=>{return 
()=>{value.changeInfo(synopsis)}}> poster} alt={name}/>

{name}

观众评分:{grade}
}}
//组件2 {(value)=>
detail-{value.info}
}

注意:GlobalContext.Consumer内必须是回调函数,通过context方法改变根组件状态

context优缺点:

优点:跨组件访问数据
缺点: react组件树种某个上级组件shouldComponetUpdate返回false,当context更新时,不会引起下级组件更新

React插槽

使用props的固定属性children在Child组件中占位

作用:

1.为了复用
2.一定程度减少父子通信

单个插入

//子组件写入this.props.children,为插入部分留下位置
class Swiper extends Component{render(){return  
{this.props.children}
} }//父组件写入要插入子组件的内容
111111
222222
333333

多个插入

class Child extends Component{render(){return 
//子组件定义插入的顺序{this.props.children[0]}{this.props.children[1]}{this.props.children[2]}
} }//父组件写入要插入子组件的内容
11111111
222222
33333333
{// }

希望对大家有所帮助,期待你们的支持✨✨✨

相关内容

热门资讯

债市调整影响投资收益 上市银行... 42家A股上市银行一季度业绩已全部“放榜”,其中30家净利润实现正增长。总体来看,上市银行盈利主要是...
释放消费潜力 专家建议宏观政策... 近日,中国宏观经济论坛(CMF)季度论坛(2025年第一季度)在京举行。论坛聚焦“积极进取的中国宏观...
从严从实从细保平安保畅通 用心... 本报讯(记者 田得乾 石成砚)5月5日,省委副书记、省长罗东川来到省交通运输厅、省公安厅,调研调度全...
杭州楚环科技股份有限公司关于持... 证券代码:001336 证券简称:楚环科技 公告编号:2025-018杭州楚环科技股份有限公司关于...
“一票游多日”折射旅游业向链式... 转自:千龙网这个五一假期,游客发现很多景区有了新变化。现在国内许多景点都开始实行“一票游多日”的制度...
一片野茶林托起山村共富路 转自:衢州日报  本报讯 (报道组 郑晨 童彤 通讯员 谭君华) “茶叶种植在深山,清明谷雨芽发青…...
贵州百灵企业集团制药股份有限公... 证券代码:002424 证券简称:ST百灵 公告编号:2025-024贵州百灵企业集团制药股份有限公...
上市银行一季度业绩整体承压 债市调整影响投资收益上市银行一季度业绩整体承压◎记者 马慜 42家A股上市银行一季度业绩已全部“放榜...
A股风险偏好有望回暖 5月或回... ■机构展望A股风险偏好有望回暖5月或回归科技成长风格◎记者 汪友若 5月6日,A股市场迎来5月首个交...
建立完善监管体系 促进低空经济... 党的二十届三中全会提出,完善推动新一代信息技术、人工智能、航空航天、新能源、新材料、高端装备、生物医...
存量强势吸金 新品密集成立 今... 存量强势吸金 新品密集成立今年以来2700亿元资金借道ETF入市◎记者 赵明超 尽管开年以来遭遇资金...
东方时尚驾驶学校股份有限公司关... 证券代码:603377 证券简称:ST东时(维权) 公告编号:临2025-073转债代码:11357...
人气旺 市面暖 活力足 转自:衢州日报  文旅融合热力上扬,消费市场活力涌动,电影文博持续火热……今年“五一”,各地假日经济...
汇卡商务等机构违规被罚 第三方... 第三方支付行业加快洗牌。近日,包括北京市政交通一卡通、广东汇卡商务等在内的多家机构因违规被处罚。中国...
将对所有在外国制作的电影征收1... 转自:成都日报锦观特朗普:将对所有在外国制作的电影征收100%关税 据新华社洛杉矶5月4日电(...
“拎包入住”模式引领种菜新潮 转自:衢州日报  记者 林敏 文/摄 报道组 郑晨  4月29日下午,位于柯城区信安街道信安村的信安...
丝瓜络种植正当时 转自:衢州日报  ​气温持续回升,正是农作物育苗种植的关键时节。近日,在常山县东案乡金源村,5万株丝...
兵团研发成功葡萄藤越冬新覆盖材... 本报石河子讯(全媒体记者 马燕) “这片试验田同时采用传统埋土法、毛毡覆盖法和我们新研发的‘抗冻...
为教育后勤服务升级赋能 转自:衢州日报  本报讯 (通讯员 雷湘熠) 近日,杭州市富阳区教育局组织2025年教育系统后勤管理...
经济迸活力 文旅引热潮 转自:成都日报锦观经济迸活力 文旅引热潮 近日,全国首单知识产权质押关税保函落地成都高新区。企...