在umi中更便捷的使用dispatch

首先呢,umi中只要通過connect后就會自動注入dispatchprops中奢赂,3.0中提供ConnectRC還方便了些陪白,在2.0使用類組件的時候,總是要顯示的聲明在接口里膳灶,或者去繼承一些東西咱士。

可仍然會寫出這樣的代碼

const { dispatch } = this.props;

這個函數(shù)在每一次注入的時候不都是一樣的嘛,由于我的路由配置都會通過wrappers設置公告組件

于是乎

window.umiDispatch = props.dispatch;
declare global {
  interface Window {
    umiDispatch: Dispatch;
  }
}

其次呢轧钓,dva提供的Model并不靈活司致,不宜與擴展,比如一點


export default {
  state: {
    name,
  },
  reducers: {
    save(state) {
      state.name = payload.name;
    },
  },

statesave里的state是一個類型的聋迎,不用重復的寫...

所以我自己定義了一個

import { SubscriptionsMapObject, EffectsCommandMap } from 'dva';
interface NModel<S> {
  namespace: string;
  state?: S;
  reducers?: {
    [key: string]: (state: S, action: any) => void;
  };
  effects?: {
    [key: string]: (action: any, effects: EffectsCommandMap) => void;
  };
  subscriptions?: SubscriptionsMapObject;
}

namespce統(tǒng)一管理,盡管默認是文件的名字

namespace NModel {
  export enum ENames {
    MDTest = 'MDTest',
    MDNotes = 'MDNotes',
  }
}

一個model文件是這樣的

import NModel from '@/common/type/NModel';

export namespace NMDTest {
  export interface IState {
    name: string;
  }
}

export default {
  namespace: NModel.ENames.MDTest,
  state: {
    name,
  },
  effects: {
    *query() {
    },
  },
  reducers: {
    save(state) {
    
    },
  },
} as NModel<NMDTest.IState>;

為了方便connect注入屬性的時候也能得到提示枣耀,所有的state聲明也放入NModule中管理

export interface IState {
    [ENames.MDTest]: NMDTest.IState;
    [ENames.MDNotes]: NMDNotes.IState;
  }

就可以這樣

export default connect(({ MDTest:{name} }: NModel.IState) => ({
  name,
}))(TestHook);

通常觸發(fā)dispatch是這樣的

    dispatch({
      type: 'products/getProducts',
      payload: {
          name:"oop"
      },
    });

這個type屬性涉及到的命名空間霉晕、方法名庭再、傳參是要靠硬記嗎?總之我看了很多文章沒找到什么好的方法牺堰,侵入性比較大拄轻,如果解決一個問題需要引入一個新的模式或概念,就要好好權衡一下值不值伟葫。

首先在NModel文件中加入IActiondispatch

  export class IAction<P = any> {
    type: string;
    namespace: string;
    payload: P;
    constructor(payload: P) {
      this.payload = payload;
    }
  }
  export function dispatch(action: NModel.IAction) {
    window.umiDispatch({
      type: `${action.namespace}/${action.type}`,
      payload: action.payload,
    });
  }

屬性默認就是public

那么在model文件中

export namespace NMDTest {
  export interface IState {
    name: string;
  }
  class Action<P> extends NModel.IAction<P> {
    namespace = NModel.ENames.MDTest;
  }
  export class AEQuery extends Action<{ name: string }> {
    type = 'query';
  }
  export class ARSave extends Action<{ name: string; age: number }> {
    type = 'save';
  }
}
export default {
  effects: {
    *query({ payload }: NMDTest.AEQuery, { put }) {
    },
  },
  reducers: {
    save(state, { payload }: NMDTest.ARSave) {
      state.name = payload.name;
    },
  },
} as NModel<NMDTest.IState>;

使用的時候

NModel.dispatch(new NMDTest.ARSave({ name: 'oop', age: 12 }));

需要不斷的加入模板代碼是

  export class AEQuery extends Action<{ name: string }> {
    type = 'query';
  }
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末恨搓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子筏养,更是在濱河造成了極大的恐慌斧抱,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渐溶,死亡現(xiàn)場離奇詭異辉浦,居然都是意外死亡,警方通過查閱死者的電腦和手機茎辐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門宪郊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拖陆,你說我怎么就攤上這事弛槐。” “怎么了依啰?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵乎串,是天一觀的道長。 經(jīng)常有香客問我孔飒,道長灌闺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任坏瞄,我火速辦了婚禮桂对,結果婚禮上,老公的妹妹穿的比我還像新娘鸠匀。我一直安慰自己蕉斜,他們只是感情好,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布缀棍。 她就那樣靜靜地躺著宅此,像睡著了一般。 火紅的嫁衣襯著肌膚如雪爬范。 梳的紋絲不亂的頭發(fā)上父腕,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音青瀑,去河邊找鬼璧亮。 笑死萧诫,一個胖子當著我的面吹牛,可吹牛的內容都是我干的枝嘶。 我是一名探鬼主播帘饶,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼群扶!你這毒婦竟也來了及刻?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤竞阐,失蹤者是張志新(化名)和其女友劉穎缴饭,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體馁菜,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡茴扁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了汪疮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片峭火。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖智嚷,靈堂內的尸體忽然破棺而出卖丸,到底是詐尸還是另有隱情,我是刑警寧澤盏道,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布稍浆,位于F島的核電站,受9級特大地震影響猜嘱,放射性物質發(fā)生泄漏衅枫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一朗伶、第九天 我趴在偏房一處隱蔽的房頂上張望弦撩。 院中可真熱鬧,春花似錦论皆、人聲如沸益楼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽感凤。三九已至,卻和暖如春粒督,著一層夾襖步出監(jiān)牢的瞬間陪竿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工屠橄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萨惑,地道東北人捐康。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像庸蔼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贮匕,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354