React Native 多继承(mix-in)实现

1). 创建登录监听
/**
 * 登录成功
 * @param SuperComponent 父类
 */
const LoginInSuccess = SuperComponent => class extends SuperComponent {
  /**
   * 登录成功监听
   */
  _loginInSuccessListener = null;

  componentWillMount(): void {
    super.componentWillMount && super.componentWillMount();
    this._loginInSuccessListener = RCTDeviceEventEmitter.addListener('DIDLOGINSUCCESS', (msg) => {
      if ('LOGIN_STR' === msg) {
        // 登录成功
        this.onLoginIn && this.onLoginIn();
      } else if ('GET_APP_USER' === msg) {
        // 获取账户信息
        this.onGetAppUser && this.onGetAppUser();
      }
    });
  }

  componentWillUnmount(): void {
    super.componentWillUnmount && super.componentWillUnmount();
    this._loginInSuccessListener && this._loginInSuccessListener.remove();
    this._loginInSuccessListener = null;
  }
};

其中第一个SuperComponent作为参数传递,第二个class extends SuperComponent作为父类继承,类中实现的componentWillMount()和componentWillUnmount()方法为 React Native 中的 Component 中的方法,因此此处不一定非要写这两个方法。_loginInSuccessListener为私有变量,是我们想要设置的监听对象。

2). componentWillMount()方法介绍

该方法第一行判断super.componentWillMount是否实现了该方法,如果实现了则调用该方法,即调用父类方法。RCTDeviceEventEmitter.addListener即为添加监听,第一个参数为添加监听的名字,第二个参数为监听到该事件后所要执行的方法,方法中的参数用于检测具体想要执行的动作。

3). componentWillUnmount()方法介绍

在该方法中判断是否有父类实现该方法,有则调用,接下来判断监听对象是否为空,如果为空则不移除监听,反之移除。最后将设置的监听设置为空。

4). 发送事件
/**
 * 发送登录成功事件--登录成功
 */
const sendLoginInStr = () => {
  RCTDeviceEventEmitter.emit('DIDLOGINSUCCESS','LOGIN_STR');
};
5). 使用
@ListenerComponent.LoginOutSuccess // 该实现未给出,此处意为多继承,即 mix in
@ListenerComponent.LoginInSuccess
@observer
export default class Login extends Component {
    // LoginInSuccess 中的监听方法,如果需要则实现,反之可不实现
    onLoginIn = () => {}
}
3110861-f507d7eccdb75457.png
使用.png
6). 优势

多个Component或类具有相同的功能时,例如设置监听等方法,将其抽取,每次调用时只用在类名上使用@xxx 即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值