react-native 之事件管理EventManager

因為項目沒有涉及到一些復雜操作,當時看了博客據說redux很麻煩一般不建議用,當時寫項目的時候覺的事件的處理回調很是麻煩,就寫了一個EventManager,在此紀錄一下,拋磚引玉,希望有更好的封裝,后期可能也會轉向redux。

先看代碼吧 其實很簡單。

  //建立一個事務管理對象
 let EventManager = {};
  //記錄事物的操作  一個對象 key為type  value本質是一個一維數組
  EventManager.eventList = {};

 /**
 * 添加監(jiān)聽
 * @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);
}

  /**
   * 移除監(jiān)聽
   * @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);
    }
    }
}

/**
 * 事件觸發(fā)
 * @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);
    }

如果有不明白的歡迎提問 轉載請注明出處~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容