码迷,mamicode.com
首页 > 其他好文 > 详细

#003 React 组件 继承 自定义的组件

时间:2016-03-17 16:30:18      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

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

一、需求说明

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

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

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

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

二、解决方案

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

  1. class Win extends React.Component

替换成

  1. class Win extends BaseWin

1. 例子代码

  1. import React from ‘react‘
  2. /**
  3. * 所有弹框的基类
  4. */
  5. class BaseWin 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. export default BaseWin;
  1. import React from ‘react‘
  2. import BaseWin from ‘./baseWindow‘
  3. class Win 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. return this.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. export default Win;

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

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

运行的效果图:

1. 子类构造函数

技术分享

2. super(props) 实例化父类

技术分享

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

技术分享

技术分享

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

技术分享





#003 React 组件 继承 自定义的组件

标签:

原文地址:http://www.cnblogs.com/zhongxia/p/5ced3d09468044a05fcd0de63c9ce1e2.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!