主题:React组件 继承 自定义的 组件

一、需求说明

情况说明: 有A,B,C,D 四个组件,里面都有一些公用的逻辑,比如 设置数据,获取数据,有某些公用的的属性,不想在 每一个 组件里面写这些属性,怎么办? 【和 面向对象的语言,C#,Java 的基类 思想是 一样的】

如果公用的东西,是一些方法,可以 使用 React 的 Mixins(ES5) ,高阶组件(ES6)【高阶函数不太了解,如何使用,去找下资料

但是如果有公用的属性,那么就有点 力不从心了

在想,React 中,是否可用继承 自定义的组件?
经过一番查找资料,发现,React 是可以 继承 自己定义的组件的

二、解决方案

实现的步骤很简单,只需要 把

  1. classWin extends React.Component

替换成

  1. classWin extends BaseWin

1. 例子代码

  1. importReact from 'react'
  2. /**
  3. * 所有弹框的基类
  4. */
  5. classBaseWin extends React.Component{
  6. constructor(props){
  7. super(props);
  8. this.name ='zhongxia';
  9. this.state ={};
  10. }
  11. common(){
  12. alert('this is a common function!')
  13. }
  14. }
  15. exportdefaultBaseWin;
  1. importReact from 'react'
  2. importBaseWin from './baseWindow'
  3. classWin extends BaseWin{
  4. constructor(props){
  5. super(props);
  6. this.state ={
  7. ...this.props
  8. };
  9. console.log(this.name);
  10. this.common();
  11. }
  12. getData(){
  13. returnthis.state;
  14. }
  15. render(){
  16. this.state.node.model.set({name:'zhongxia', age:17})
  17. return(
  18. <div className="pop-dialog">
  19. <h2>弹框1</h2>
  20. <form>
  21. <label htmlFor="">用户名:</label><input value={this.state.name} type="text"/>
  22. <label htmlFor="">密码:</label><input type="password" value={this.state.password}/>
  23. </form>
  24. </div>
  25. );
  26. }
  27. }
  28. exportdefaultWin;

2. 实例化 React 组件的顺序 和效果图

实例化子类组件 ==》 构造函数里面 super(prop)的时候去实例化 父类组件 ==》 父类组件实例化结束 ==》 子类组件实例化结束

运行的效果图:

1. 子类构造函数

2. super(props) 实例化父类

3. 子类构造函数结束,已经可以拿到父类的属性和方法

4. 子类实例开始渲染页面

您可能还感兴趣

1. 【GITHUB】前端技术文章汇总

#003 React 组件 继承 自定义的组件的更多相关文章

  1. 基于React.js网页版弹窗|react pc端自定义对话框组件RLayer

    基于React.js实现PC桌面端自定义弹窗组件RLayer. 前几天有分享一个Vue网页版弹框组件,今天分享一个最新开发的React PC桌面端自定义对话框组件. RLayer 一款基于react. ...

  2. 22Flutter中的常见的按钮组件 以及自定义按钮组件

    /* Flutter中的常见的按钮组件 以及自定义按钮组件 一.Flutter中的按钮组件介绍 Flutter里有很多的Button组件,常见的按钮组件有:RaisedButton/FlatButto ...

  3. Flutter 中的常见的按钮组件 以及自定义按钮组件

    Flutter 里有很多的 Button 组件很多,常见的按钮组件有:RaisedButton.FlatButton. IconButton.OutlineButton.ButtonBar.Float ...

  4. MIP组件开发 自定义js组件开发步骤

    什么是百度MIP? MIP(Mobile Instant Pages - 移动网页加速器)主要用于移动端页面加速 官网参考:https://www.mipengine.org/doc/00-mip-1 ...

  5. 浅尝Spring注解开发_自定义注册组件、属性赋值、自动装配

    Spring注解开发 浅尝Spring注解开发,基于Spring 4.3.12 包含自定义扫描组件.自定义导入组件.手动注册组件.自动注入方法和参数.使用Spring容器底层组件等 配置 @Confi ...

  6. Swift - 继承UIView实现自定义可视化组件(附记分牌样例)

    在iOS开发中,如果创建一个自定义的组件通常可以通过继承UIView来实现.下面以一个记分牌组件为例,演示了组件的创建和使用,以及枚举.协议等相关知识的学习. 效果图如下:    组件代码:Score ...

  7. day58——模板继承、组件、自定义标签和过滤器、inclusion_tag、静态文件配置、url别名和反向解析、url命名空间

    day58 模板相关 模板继承(母版继承) 1. 创建一个xx.html页面(作为母版,其他页面来继承它使用) 2. 在母版中定义block块(可以定义多个,整个页面任意位置) {% block co ...

  8. 工程日记之HelloSlide(1):Swift自定义可视化组件的方法(继承UIView和在StoryBoard中设置)

    需求描述 HelloSlide是把文本自动转化成幻灯片的软件,在幻灯片中我们有SmartArt:各种各样的几何形状,并且可以自定义大小和颜色,放在幻灯片不同的位置. 为了在我们的软件中实现类似的效果, ...

  9. react hooks 如何自定义组件(react函数组件的封装)

    前言 这里写一下如何封装可复用组件.首先技术栈 react hooks + props-type + jsx封装纯函数组件.类组件和typeScript在这不做讨论,大家别白跑一趟. 接下来会说一下封 ...

随机推荐

  1. [IMX6]Android6.0移植和分析

    0. 知识点 中断(设备树) [IMX6]设备树分析--dts 1. 编译 Android6.0内核移植(1):分析编译日志 Android6.0内核移植(2):kernel编译内核 单独烧录kern ...

  2. HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等

    HTML5 的本地存储 API 中的 localStorage 与 sessionStorage 在使用方法上是相同的,区别在于 sessionStorage 在关闭页面后即被清空,而 localSt ...

  3. 关于EF Unit of Work Repository的简单用法

    其实ef本身就是unit of work+repository的 其中继承自DbContext的类就是unit of work context中的DbSet<T>属性就是repositor ...

  4. ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock 问题修改

    ubuntu 常见错误–Could not get lock /var/lib/dpkg/lock 通过终端安装程序sudo apt-get install xxx或者apt-get update时出 ...

  5. HTML杂项和HTML废弃标签

    一.HTML杂项 1.HTML注释  <!-- 里边放要注释的文字 --> 1)html的注释是为了方便后期的维护,方便后期更改时能够快速的定位到所需更改的部分 2)html的注释在页面的 ...

  6. gRPC版本的 Google APIs

    gRPC将是未来google所有客户端的库标准(DevoxxFR), 这句话的出处: https://twitter.com/chanezon/status/585724143003402240    ...

  7. java设计模式-----13、组合模式

    Composite模式也叫组合模式,是构造型的设计模式之一.通过递归手段来构造树形的对象结构,并可以通过一个对象来访问整个对象树. 组合(Composite)模式的其它翻译名称也很多,比如合成模式.树 ...

  8. python学习之老男孩python全栈第九期_数据库day004知识点总结 —— MySQL数据库day4

    复习: 1. MySQL:文件管理的软件 2. 三部分: - 服务端 - SQL语句 - 客户端 3. 客户端: - MySQL - navicat 4. 授权操作: - 用户操作 - 授权操作 5. ...

  9. Scala + Thrift+ Zookeeper+Flume+Kafka配置笔记

    1. 开发环境 1.1. 软件包下载 1.1.1. JDK下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downl ...

  10. Android Studio查看签名文件sha1和MD5的方法

    Android在生成了应用签名文件后,如果我们想要查看签名文件的sha1和md5,该怎么操作呢??下面我们来看看. 把android studio界面左下角的Terminal终端窗口打开,进入JDK的 ...