当前位置: 首页 > news >正文

专业的网站建设方案长沙建设教育网官网

专业的网站建设方案,长沙建设教育网官网,宽屏网站模板html,页面好看的蛋糕网站#一、是什么 我们将组件间通信可以拆分为两个词: 组件通信 回顾Vue系列 (opens new window)的文章,组件是vue中最强大的功能之一,同样组件化是React的核心思想 相比vue,React的组件更加灵活和多样,按照不同的方式可…

#一、是什么

我们将组件间通信可以拆分为两个词:

  • 组件
  • 通信

回顾Vue系列 (opens new window)的文章,组件是vue中最强大的功能之一,同样组件化是React的核心思想

相比vueReact的组件更加灵活和多样,按照不同的方式可以分成很多类型的组件

而通信指的是发送者通过某种媒体以某种格式来传递信息到收信者以达到某个目的,广义上,任何信息的交通都是通信

组件间通信即指组件通过某种方式来传递信息以达到某个目的

#二、如何通信

组件传递的方式有很多种,根据传送者和接收者可以分为如下:

  • 父组件向子组件传递
  • 子组件向父组件传递
  • 兄弟组件之间的通信
  • 父组件向后代组件传递
  • 非关系组件传递

#父组件向子组件传递

由于React的数据流动为单向的,父组件向子组件传递是最常见的方式

父组件在调用子组件的时候,只需要在子组件标签内传递参数,子组件通过props属性就能接收父组件传递过来的参数

function EmailInput(props) {return (<label>Email: <input value={props.email} /></label>);
}const element = <EmailInput email="123124132@163.com" />;

#子组件向父组件传递

子组件向父组件通信的基本思路是,父组件向子组件传一个函数,然后通过这个函数的回调,拿到子组件传过来的值

父组件对应代码如下:

class Parents extends Component {constructor() {super();this.state = {price: 0};}getItemPrice(e) {this.setState({price: e});}render() {return (<div><div>price: {this.state.price}</div>{/* 向子组件中传入一个函数  */}<Child getPrice={this.getItemPrice.bind(this)} /></div>);}
}

子组件对应代码如下:

class Child extends Component {clickGoods(e) {// 在此函数中传入值this.props.getPrice(e);}render() {return (<div><button onClick={this.clickGoods.bind(this, 100)}>goods1</button><button onClick={this.clickGoods.bind(this, 1000)}>goods2</button></div>);}
}

#兄弟组件之间的通信

如果是兄弟组件之间的传递,则父组件作为中间层来实现数据的互通,通过使用父组件传递

class Parent extends React.Component {constructor(props) {super(props)this.state = {count: 0}}setCount = () => {this.setState({count: this.state.count + 1})}render() {return (<div><SiblingAcount={this.state.count}/><SiblingBonClick={this.setCount}/></div>);}
}

#父组件向后代组件传递

父组件向后代组件传递数据是一件最普通的事情,就像全局数据一样

使用context提供了组件之间通讯的一种方式,可以共享数据,其他数据都能读取对应的数据

通过使用React.createContext创建一个context

 const PriceContext = React.createContext('price')

context创建成功后,其下存在Provider组件用于创建数据源,Consumer组件用于接收数据,使用实例如下:

Provider组件通过value属性用于给后代组件传递数据:

<PriceContext.Provider value={100}>
</PriceContext.Provider>

如果想要获取Provider传递的数据,可以通过Consumer组件或者或者使用contextType属性接收,对应分别如下:

class MyClass extends React.Component {static contextType = PriceContext;render() {let price = this.context;/* 基于这个值进行渲染工作 */}
}

Consumer组件:

<PriceContext.Consumer>{ /*这里是一个函数*/ }{price => <div>price:{price}</div>}
</PriceContext.Consumer>

#非关系组件传递

如果组件之间关系类型比较复杂的情况,建议将数据进行一个全局资源管理,从而实现通信,例如redux

http://www.yayakq.cn/news/964074/

相关文章:

  • 南宁市营商环境建设局网站手机优化应用是怎么回事
  • 无锡网站设计哪家公司好石家庄科技网站建设
  • 网站建设培训哪家好找合作项目app平台
  • 邹平网站建设长春做网站优化
  • 网络公司网站 优帮云长沙网站建设公司
  • 合肥建设网站制作哪个好wordpress 用户角色插件
  • 网站建设遵循的原则是什么爱网聊的人
  • 邯郸企业建站电商网站建设与管理自考试卷
  • 青岛网站设计公司推荐简洁网站布局
  • 免费建站的网站99环保网站策划书
  • 成都公司做网站多少钱艺考培训学校
  • 深圳网站优化效果哪些彩票网站可做代理赚钱
  • 数据查询网站模板网站关键词过多
  • 网站设计费用价目表青浦专业做网站公司
  • 自动化东莞网站建设自建网站做淘宝联盟
  • 男人不知本网站 枉做企业密信下载
  • 做网站建设公司网站设计无站点推广就是不在网上推广
  • 自己建设网站需要些什么网页设计师培训多少钱
  • 石大远程网页设计与网站建设答案东营有能做网站优化
  • 企业电子商务网站优化方案网站推广要具备什么
  • 三合一网站开发教程wordpress编辑页面打不开
  • 宁波网站建设设计价格网站设计深圳公司
  • 网站做seo必要的结构老域名新网站推广
  • 成都建立网站给wordpress插件添加po文件
  • 合肥专业做网站的公司有哪些汉阳做网站多少钱
  • 手机免费制作网站网站空间在哪买
  • 网站可做哪些服务wordpress 移动导航菜单
  • 医院网站建设公司价格seo站长博客
  • 鲜花网站建设源代码做网站设计是什么专业
  • 建设春秋龙卡信用卡网站wordpress发布时间精确到秒