react+antd的Modal和Form復(fù)合使用

Modal的使用
Modal是一個使用頻率很高的組件
antd對于Modal提供的方法和屬性其實(shí)已經(jīng)很全面了,而日常用法在遇到一些特殊的情況的時候會覺得很麻煩磁椒,比如
1、一個組件有多個Modal玫芦,因?yàn)樾枰獀isible來控制是否顯示浆熔,state里面需要寫很多個visible。
2桥帆、一個組件里有多個Form,而且Form還放在Modal里面(這也是一個很常見的操作医增,彈出一個模態(tài)框然后填一些數(shù)據(jù),然后提交)老虫。
3叶骨、Modal里面包含了Table+搜索框等內(nèi)容。

解決的思路很簡單

  • 情況1的話使用Modal.confirm()或者M(jìn)odal.info()祈匙。根據(jù)是否需要提交操作選擇忽刽。

  • 情況2天揖、3寫一個新的組件,所有Modal里組件的顯示跪帝、變化都在當(dāng)前組件控制今膊。只需要在父組件中調(diào)用并傳入visible,onOk等參數(shù)

具體實(shí)現(xiàn)代碼

方法一:直接彈出Modal(不需要visible控制,可支持提交伞剑、可支持關(guān)閉時銷毀)
優(yōu)點(diǎn):
1斑唬、可以直接在方法中調(diào)用,不需要用visible控制顯示黎泣,使用destroy()關(guān)閉仰禀。
2勘究、可以不通過更新state來更新Modal册着,使用update()直接更新Modal胰伍。
缺點(diǎn):
1、只有兩個按鈕衡便,不可設(shè)置更多的按鈕献起,適合只需要一個關(guān)閉,一個提交的情況镣陕。
[Modal.info/success/error/warning只有一個按鈕]谴餐。

showConfirm = () => {
  const modal = Modal.confirm();
  modal.update({
    title: '標(biāo)題',
    okText: '保存',//默認(rèn)為確認(rèn)
    cancelText: '關(guān)閉',//默認(rèn)為取消
    destroyOnClose: true,
    //默認(rèn)false。默認(rèn)關(guān)閉后狀態(tài)不會自動清空, 如果希望每次打開都是新內(nèi)容需要設(shè)置true
    content: (
        <div>
         //Modal內(nèi)其他組件
        </div>
      ),
    onOk() {
    //調(diào)用點(diǎn)擊確定時回調(diào)的方法
    },
    onCancel() {
    //點(diǎn)擊取消/遮罩層的時候回調(diào)的方法
      modal.destroy();//這是調(diào)用Modal.confirm()后返回的引用呆抑,可以通過該引用更新和關(guān)閉彈窗
    },
  });
}

方法二:使用Modal+Form實(shí)現(xiàn)一個Modal子組件岂嗓。
優(yōu)點(diǎn):不需要設(shè)置ref。直接在子組件里控制Form的變化鹊碍。由于變成了一個單獨(dú)組件厌殉,父組件里不用監(jiān)控Modal里其他組件的變化。
缺點(diǎn):沒覺得有什么缺點(diǎn)侈咕。

class CreatePlan extends Component {
  constructor() {
    super();
  }

  onOk = () => {
    this.props.form.validateFields((err, values) => {
      if (err) return;//檢查Form表單填寫的數(shù)據(jù)是否滿足rules的要求
      this.props.onOk(values);//調(diào)用父組件給的onOk方法并傳入Form的參數(shù)公罕。
    })
  };
  onCancel = () => {
    this.props.form.resetFields();//重置Form表單的內(nèi)容
    this.props.onCancel()//調(diào)用父組件給的方法
  };

  render() {
    const {getFieldDecorator} = this.props.form;
    return (
      <Modal
        onOk={this.onOk}
        onCancel={this.onCancel}
        visible={this.props.visible}
        title='新增自動升級'
      >
        <Form>
          <FormItem label="升級計(jì)劃名稱">
            {getFieldDecorator('planName', {
              rules: [{required: true, message: '請?zhí)顚懮売?jì)劃名稱'}],
            })(
              <Input/>
            )}
          </FormItem>
          <FormItem label="自動升級時間">
            {getFieldDecorator('upgradeTime', {
              initialValue: moment(),
              rules: [{required: true, message: '請選擇自動升級時間'}],
            })(
              <DatePicker
                style={{width: 300}}
                showTime
                format="YYYY-MM-DD HH:mm:ss"
                placeholder="選擇自動升級時間"
              />
            )}
          </FormItem>
        </Form>
      </Modal>
    )
  }
}
export const CreatePlanFormModal = Form.create()(CreatePlan);

//以下父組件里的代碼
 <CreatePlanModal
    visible={this.state.createPlanModalVisible}
    onOk={(values) => this.judgeCreatePlan(values)}
    onCancel={this.handleCancel}
/>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市耀销,隨后出現(xiàn)的幾起案子楼眷,更是在濱河造成了極大的恐慌,老刑警劉巖熊尉,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件罐柳,死亡現(xiàn)場離奇詭異,居然都是意外死亡狰住,警方通過查閱死者的電腦和手機(jī)张吉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來催植,“玉大人肮蛹,你說我怎么就攤上這事勺择。” “怎么了蔗崎?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長扰藕。 經(jīng)常有香客問我缓苛,道長,這世上最難降的妖魔是什么邓深? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任未桥,我火速辦了婚禮,結(jié)果婚禮上芥备,老公的妹妹穿的比我還像新娘冬耿。我一直安慰自己,他們只是感情好萌壳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布亦镶。 她就那樣靜靜地躺著,像睡著了一般袱瓮。 火紅的嫁衣襯著肌膚如雪缤骨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天尺借,我揣著相機(jī)與錄音绊起,去河邊找鬼。 笑死燎斩,一個胖子當(dāng)著我的面吹牛虱歪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播栅表,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼笋鄙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了怪瓶?” 一聲冷哼從身側(cè)響起局装,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎劳殖,沒想到半個月后铐尚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哆姻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年宣增,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矛缨。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡爹脾,死狀恐怖帖旨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情灵妨,我是刑警寧澤解阅,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站泌霍,受9級特大地震影響货抄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜朱转,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一蟹地、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧藤为,春花似錦怪与、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至存淫,卻和暖如春茎杂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纫雁。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工煌往, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人轧邪。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓刽脖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親忌愚。 傳聞我的和親對象是個殘疾皇子曲管,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容