React Native学习React Native开发React Native实践

React Native 自定义继承、单例实现、通知

2018-11-12  本文已影响10人  pengxiaochao

有时候在写一些页面的,如果把所有的业务逻辑和属性写到 Controler 里面,代码太多余臃肿,所以我们会用继承,将一些通用的方法 写到基类里面,将通用属性写到基类里面,那在React Native 里面,我们也可以这么写;

优点: 监听 和 常用属性和基类方法放在基类实现,子类实现业务逻辑和UI;

  1. 创建 BasePage 基类 让子类 SubClassPage 继承基类;

BasePage 的实现

/* 定时密码*/
class BasePage extends React.Component {
  constructor(props, context) {
    super(props, context);
    this.state={
      title:'我是父类的属性title',
      subTitle:'我是父类的属性subTitle',
    };
  }

  componentWillMount() {
  }

  componentDidMount(){
  }

  componentWillUnmount() {
  }   
}


module.exports = BasePage;

SubClassPage的实现

class SubClassPage extends BasePage{
  constructor(props, context) {
    super(props, context);
    this.state={
      ...this.state,
      newTitle:'子类的State 属性',
    };
  }

  render(){
    return (
      <View style={styles.containerAll}>
         <View style={styles.contentView}>
          <Text>{this.state.title}</Text>
          <Text>{this.state.subTitle }</Text>
          <Text>{this.state.newTitle }</Text>
         </View>
      </View>
      );
  }
  
  componentWillMount() {
  }

  componentDidMount(){
  }

  componentWillUnmount() {
  }   

}

module.exports = BasePage;

实现效果

2. 单例的实现

实现一个类似ios 单例写法的对象 SingleManager;

'use strict';
var React = require('react-native');

let instance = null;

class SingleManager extends React.Component {
  constructor(props, context) {
    super(props,context);

    if(!instance){
      instance = this;
    }
    this.state={
      title:null,
      subTitle:null,
    };
    return instance;
  }

  setTitle(title){
    this.state.title = title;
  }

  getTitle(){
    return this.state.title;
  }
}

module.exports = SingleManager;

在页面调用

var single1 = new SingleManager();
single1.setTitle('娃哈哈');
console.log(single1.getTitle());


var single2 = new SingleManager();

single2.setTitle('我是单例2')
console.log('single1.title:   '+single1.getTitle());
console.log('single2.title:   '+single2.getTitle());

实际打印结果这确实是个单例

娃哈哈
single1.title:   我是单例2
single2.title:   我是单例2
上一篇下一篇

猜你喜欢

热点阅读