资讯专栏INFORMATION COLUMN

react开发教程(八)React组件通信

kamushin233 / 902人阅读

摘要:父子组件通讯通讯手段这是最常见的通信方式,父组件只需要将子组件需要的传给子组件,子组件直接通过来使用。

父子组件通讯

通讯手段
这是最常见的通信方式,父组件只需要将子组件需要的props传给子组件,子组件直接通过this.props来使用。
通讯内容
更多要提的是如何合理的设置子组件的props,要想将子组件设计成一个复用性强的通用组件,需要将能够复用的部分抽象出来,抽象出来的props有两种形成,一种是简单的变量,另一种是抽象出来处理某种逻辑函数

以Header 组件为例

</>复制代码

  1. //HeaderBar.jsx 子组件
  2. import React, { Component } from "react";
  3. class Header extends Component {
  4. constructor() {
  5. super();
  6. this.handleClick = (e) => {
  7. console.log(this)
  8. }
  9. }
  10. renderLeftComponent() {
  11. let leftDOM = {};
  12. if (this.props.renderLeftComponent) {
  13. return this.props.renderLeftComponent();
  14. }
  15. if (this.props.showBack) {
  16. let backFunc = this.props.onBack || this.goBack;
  17. leftDOM = ();
  18. }
  19. return leftDOM;
  20. }
  21. renderRightComponent() {
  22. if (this.props.renderRightComponent) {
  23. return this.props.renderRightComponent();
  24. }
  25. }
  26. goBack() {
  27. alert("返回上一页")
  28. }
  29. render() {
  30. return (
  31. {this.renderLeftComponent()}
  32. {this.props.title || "滴滴"}
  33. {this.renderRightComponent()}
  34. );
  35. }
  36. }
  37. export default Header;
  38. //父亲组件部分代码App.jsx
  39. import HeaderBar from "./components/Header";
  40. let leftIcon = function () {
  41. return (
  42. 左边按钮
  43. )
  44. }
  45. class App extends Component {
  46. render() {
  47. return (
  48. );
  49. }
  50. }
子父组件通讯

父-子组件通信的手段是通过子组件的props是子组件用父组件的东西,子-父组件通信,是父组件用子组件的东西,暂时了解的两种方法

利用回调函数

父组件通过props传递一个方法给子组件,子组件通过props方法将子组件数据传递给父组件

利用ref

父组件通过refs调用子组件的属性

跨级组件通信

在React中当一个属性反复使用并且存在与好几个子组件中的时候,这个时候我们如果通过props一级一级传递的话可以实现多层级访问,但是这样出现一个问题就是会使代码非常混乱,在React中国年,我们还可以使用 context 来实现跨级父子组件间的通信;
在react中context称为虫洞

</>复制代码

  1. // Component 父级
  2. class parentComponent extends React.Component {
  3. // add the following property
  4. static childContextTypes = {
  5. color: React.PropTypes.string
  6. }
  7. // 添加下面方法
  8. getChildContext() {
  9. return {
  10. color: "#f00"
  11. }
  12. }
  13. render() {
  14. }
  15. }
  16. // Component Child1
  17. class Child1 extends React.Component {
  18. // 添加下面属性
  19. static contextTypes = {
  20. color: React.PropTypes.string
  21. }
  22. render() {
  23. {this.context.color}
  24. }
  25. }
同级组件通信

</>复制代码

  1. 同级组件之间的通信还是需要通过父组件作为中介,利用多次父-子组件通信,项目中将需要传递的数据放在了父组件的state中,变动时可以自动的同步传递。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/87200.html

相关文章

  • react开发教程(九)redux基础

    摘要:案例代码定义计算规则,即个商品价值恋人结算完成,当前购物车为空单身狗根据计算规则生成定义数据即变化之后的派发规则触发数据变化上一篇开发教程八组件通信下一篇开发教程十结合 Readux基础 什么是redux? 简单点回答就是,一个管理数据的全局对象,但是它有单一状态树的概念,所谓的单一状态树,就是指所有的 state都以一个对象树的形式储存在一个单一的 store 中。 页面中的所有状...

    muzhuyu 评论0 收藏0
  • 全栈 React + GraphQL 教程(一)

    摘要:然而,尽管使用有诸多好处,但迈出第一步可能并不容易。为了简化初始教程,我们今天只构建一个简单的列表视图。是我们将在本教程系列中使用的客户端的名称。我们将列表组件命名为。在本教程的其余部分中,你将了解到我们构建一个真正的通信应用的基础。 首发于众成翻译 Part 1——前端:使用 Apollo 声明式地请求和 mock 数据 showImg(http://p0.qhimg.com/t0...

    luxixing 评论0 收藏0
  • React Router 使用教程(阮一峰)

    摘要:它是官方维护的,事实上也是唯一可选的路由库。表示的这个部分是可选的。另一种做法是,使用指定当前路由的。而组件会使用路径的精确匹配。否则用户直接向服务器请求某个子路由,会显示网页找不到的错误。 真正学会 React 是一个漫长的过程。 你会发现,它不是一个库,也不是一个框架,而是一个庞大的体系。想要发挥它的威力,整个技术栈都要配合它改造。你要学习一整套解决方案,从后端到前端,都是全新的做...

    Yang_River 评论0 收藏0

发表评论

0条评论

kamushin233

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<