React组件之间的通信的实例
本篇文章主要介绍了React组件间通信的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
最近学习浅尝则止的学习了一下react.js这个UI的框架,react这个库给我的最大的感觉就是它能够完全的接管UI层,在要改变视图的东西的时候只需要改变其this.state中的状态。只要操作数据层的东西视图层就会发生变化,这一点我还是很喜欢的。可以摆脱对DOM的直接操作,毕竟直接来会比较复杂,本来应该是逻辑层js中混杂着各种css的字符串,对于我来说有点不爽(JSX中也混杂这标签,但我觉的不应该把它看作标签,看作语句会习惯一点)。
回到几天的重点,讲react组件之间的状态传递。
上代码:
1.定义两个子组件child-1和child-2
//child-1 子组件-1为输入框 class Input extends React.Component{ constructor(...args){ super(...args); } render(){ return <input type="text"/> } } //child-2 子组-2为显示框 class Show extends React.Component{ constructor(...args){ super(...args); } render(){ return <p></p> } }
2.定义父组件Parent并且将两个子组件插入到父组件中
class Parent extends React.Component{ constructor(...args){ super(...args); } render(){ return( <p> <Input}/> <Show/> </p> ); } }
现在的任务是在组件1总输入一些文字,同时在组件2中同时显示出来。
分析:要让组件2与组件1同步,就让组件1和2都去绑定父组件的状态。也就是说让两个组件受控。数据的走向是,组件1将自身的数据提升到父层,并且保存在父层的状态中。父层中的数据通过组件2中的props属性传递到组件2中,并在视图层进行绑定。
第一步先绑定
//在父层中的constructor中定义状态为一个空的message,this.state = {message:''} class Parent extends React.Component{ constructor(...args){ super(...args); this.state = { message:'' }
然后在父组件中的
<Show onShow={this.state.message}/>
接着来我们进入到
class Show extends React.Component{ constructor(...args){ super(...args); } render(){ return <p>{this.props.onShow}</p> }
这样组件2显示层的数据已经绑定好了,接下来我们只要改变父亲层状态中的message的内容就可以使绑定的显示层的内容跟着一起变化
将输入层的状态(数据)提升到父亲组件中.下面是改写后的组件1
class Input extends React.Component{ constructor(...args){ super(...args); } //将输入的内容更新到自身组件的状态中,并且将改变后的状态作为参数传递给该组件的一个自定义属性onInp() fn(ev){ this.props.onInp(ev.target.value); } render(){ //用onInput(注意react中采用驼峰写法和原生的略有不同)绑定fn()函数 return <input type="text" onInput={this.fn.bind(this)} value={this.props.content}/> } }
看到这里可能会有一个问题:onInp()和content没有啊?不要急,接着看
接着改写父组件中的输入层子组件1,
class Parent extends React.Component{ constructor(...args){ super(...args); this.state = { message:'' }; } //传进的text是其提升上来的状态,然后再更新父组件的状态 fn(text){ this.setState({ message:text }) } render(){ return(/* onInp就出现在这里,并绑定一个函数, 并且有一个content将父组件的状态同步到子组件中 */ <Show onShow={this.state.message}/>
); } }
写完的代码是这样的
// 父组 class Parent extends React.Component{ constructor(...args){ super(...args); this.state = { message:'' }; } onInp(text){ this.setState({ message:text }) } render(){ return(<Show onShow={this.state.message}/>
); } } //child-1 class Input extends React.Component{ constructor(...args){ super(...args); } fn(ev){ this.props.onInp(ev.target.value); } render(){ return } } //child-2 class Show extends React.Component{ constructor(...args){ super(...args); } render(){ return <p>{this.props.onShow}</p> } } //最后渲染出 ReactDOM.render(, document.getElementById('app') );
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
以上是React组件之间的通信的实例的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

上篇文章(链接),小枣君给大家介绍了宽带技术从ISDN、xDSL到10GPON的发展历程。今天,我们来聊聊即将到来的新一代光纤宽带技术——50GPON。█F5G和F5G-A介绍50GPON之前,先说说F5G和F5G-A。2020年2月,ETSI(欧洲电信标准化协会)推进了一套以10GPON+FTTR、Wi-Fi6、200G光传送/汇聚、OXC等技术为基础的固定通信网络技术体系,并将其命名为F5G,也就是第五代固网通信技术(The5thgenerationFixednetworks)。F5G是固网

PHP、Vue和React:如何选择最适合的前端框架?随着互联网技术的不断发展,前端框架在Web开发中起着至关重要的作用。PHP、Vue和React作为三种具有代表性的前端框架,每一种都具有其独特的特点和优势。在选择使用哪种前端框架时,开发人员需要根据项目需求、团队技能和个人偏好做出明智的决策。本文将通过比较PHP、Vue和React这三种前端框架的特点和使

原文标题:《无线鼠标到底是怎么做到无线的?》无线鼠标慢慢成了现在办公电脑的标配,从此再也不用拖着长长的线跑来跑去了。可是,无线鼠标是怎么工作的呢?今天我们一起来学习一下No.1无线鼠标的发展史你知道吗,无线鼠标现在也已经40岁了,1984年的时候,罗技研制了世界上第一款无线鼠标,不过这个无线鼠标采用红外线作为信号的载体,据说长得像下面图片这个样子,后面由于性能原因而宣告失败。直到十年后的1994年,罗技终于研发成功了一个工作在27MHz的无线鼠标,这个27MHz频率也成了很长一段时间内,无线鼠标

Java框架与React框架的整合:步骤:设置后端Java框架。创建项目结构。配置构建工具。创建React应用。编写RESTAPI端点。配置通信机制。实战案例(SpringBoot+React):Java代码:定义RESTfulAPI控制器。React代码:获取并显示API返回的数据。

在如今这个数字时代,宽带已经成为我们每个人、每个家庭的生活必需品。如果没有它,我们会坐立难安、心绪不宁。那么,你知道宽带背后的技术原理吗?从最早期的56k“猫”拨号,到现在的千兆城市、千兆家庭,我们的宽带技术到底经历了怎样的变革?今天这篇文章,我们就来详细了解一下——“宽带的故事”。█xDSL和ISDN下面这个界面,你见过吗?我相信很多70后80后的小伙伴,肯定见过,并且非常熟悉。没错,这就是当年我们最初接触互联网时,进行“拨号上网”的界面。那还是20多年前,小枣君还在上大学的时候。为了上网,我

PHP是一种常用的开发语言,可以用于开发各种Web应用程序。除了常见的HTTP请求和响应以外,PHP也支持通过Socket进行网络通信,实现更为灵活和高效的数据交互。本文将介绍PHP如何实现Socket通信的方法与技巧,并附上具体的代码示例。什么是Socket通信Socket是一种在网络中进行通信的方法,可以在不同的计算机之间传输数据。通过S

7月25日消息,吉林移动、中兴通讯现已在长白山主峰完成基于2.6G频段(100+60M)加700M频段(30M)三载波聚合商用,现场测试峰值速率最高可达2.53Gbps以上。官方指出,长白山是中华十大名山之一,现为国家AAAAA级旅游景区、世界地质公园、世界生物圈保护区、世界最佳自然保护地,2023年接待游客数达到274.77万人次,本次部署3CC将极大满足用户的网络需求。据介绍,吉林移动2024年初已经率先完成2.6G(100+60M)加4.9G(100M)频段三载波组网载波聚合试点,下载峰值

Golang是一门功能强大且高效的编程语言,可以用于开发各种应用程序和服务。在Golang中,指针是一种非常重要的概念,它可以帮助我们更灵活和高效地操作数据。指针转换是指在不同类型之间进行指针操作的过程,本文将通过具体的实例来学习Golang中指针转换的最佳实践。1.基本概念在Golang中,每个变量都有一个地址,地址就是变量在内存中的位置。
