react-native 之事件管理EventManager

作者: 许晓北 | 来源:发表于2017-07-17 18:04 被阅读113次

    因为项目没有涉及到一些复杂操作,当时看了博客据说redux很麻烦一般不建议用,当时写项目的时候觉的事件的处理回调很是麻烦,就写了一个EventManager,在此纪录一下,抛砖引玉,希望有更好的封装,后期可能也会转向redux。

    先看代码吧 其实很简单。

      //建立一个事务管理对象
     let EventManager = {};
      //记录事物的操作  一个对象 key为type  value本质是一个一维数组
      EventManager.eventList = {};
    
     /**
     * 添加监听
     * @param type  一个字符串 用来记录事务名称
     * @param callback   事务对应的方法回调
     * @param target    事务对应的类 一般为this
     */
      
      EventManager.on = function (type, callback, target) {
        //判断是否有此事务,如果没有就实例化value为空的一维数组。
        if (!EventManager.eventList.hasOwnProperty(type)) {
        EventManager.eventList[type] = [];
    }
    //通过target来记录回调,确保在某个地方调用的callback
    let event = {target: target, callback: callback};
    EventManager.eventList[type].push(event);
    }
    
      /**
       * 移除监听
       * @param type
       * @param target
       */
    EventManager.off = function (type, target) {
    
    if (!EventManager.eventList.hasOwnProperty(type)) {
        return;
    }
    //通过事务名称和target来移除事务
    for (let i = 0; i < EventManager.eventList[type].length; i++) {
        if (EventManager.eventList[type][i].target === target) {
            EventManager.eventList[type].splice(i, 1);
        }
        }
    }
    
    /**
     * 事件触发
     * @param type
     */
    EventManager.emitter = function (type,param) {
    if (!EventManager.eventList.hasOwnProperty(type)) {
        return;
    }
      //通过事务名称和回调的参数进行回调事务
    for (let i = 0; i < EventManager.eventList[type].length; i++) {
        EventManager.eventList[type][i].callback(param);
      }
    }
    
    export default EventManager;
    

    一般在组件使用的时候 在生命周期地方进行注册和移除

    eg:

      componentWillMount() {
        EventManager.on('setQlcNumberCount', (num) => {
            DataUtil.qlcBasketCount = num;
            this.setState({
                number: num
            });
        }, this);
    }
    
    componentWillUnmount() {
        EventManager.off('setQlcNumberCount', this);
    }
    

    在需要回调的组件中就可以进行操作

     if (this.props.loton == Constants.QLC_TYPE) {
            EventManager.emitter('setQlcNumberCount', count);
        }
    

    如果有不明白的欢迎提问 转载请注明出处~

    相关文章

      网友评论

      • 玉思盈蝶:没明白用来干嘛,怎么用
        玉思盈蝶:@许晓北 谢谢这么详细的回复了....我待会试试
        许晓北: 用来事件管理与回调 主要更多的是子控件回调父控件方法 以及刷新父页面布局之类的 事务一般操作都能解决 简单来说 当你首页是四个页面 你在第二个页面的listview 的item中页面点击开 进行了一个操作 此操作要去刷新第四个页面的某个数据 那么久可以用 应该说 基本事务处理回调都能用 例子最后给了 你可以尝试下 个人觉得还是很方便的

      本文标题:react-native 之事件管理EventManager

      本文链接:https://www.haomeiwen.com/subject/fkrqkxtx.html