antd Modal.confirm點擊確定請求完成后在關閉彈窗


需求:刪除功能使用confirm彈窗時希望點擊確認后,請求刪除接口,請求成功后在關閉confirm彈窗(避免請求還未完成用戶有其他操作)

問題:antd的Modal.confirm窗口官方給出的官方實例通過destroy()銷毀彈窗,一般點擊后直接關閉,而不是loading完成后關閉,所以我們需要找一個恰當的時機觸發destroy()

解決:

注:該項目是react項目,用到了umi和Model,mock,  代碼中removeLoading對應的是刪除請求的loading

//刪除的點擊事件
onRemove = (values) => {
    const { dispatch, removeLoading } = this.props;
    let confimModal = Modal.confirm({
      title: '刪除',
      content: '是否確認刪除?',
      onOk:(values) => {
        return new Promise((res, rej) => {
      //點擊確認進行刪除請求,並且將confirmModal保存在state中,
          dispatch({ 
            type: 'api/remove', 
            payload: values
          });
          this.setState({ 
            confimModal,
            confirmState:true, //進入頁面時confirmState默認為false,只有在點擊確認后,數據請求成功之前標記為true
          })
        }).catch((e) => console.warn(e));
      },
      onCancel() { },
    });
}
根據react的生命周期,我們可以利用shouldComponentUpdate(),來進行監聽,控制刪除彈窗的銷毀
shouldComponentUpdate(nextProps, nextState){
    //關閉刪除彈窗
    if(nextState.confirmState&&nextState.confimModal){ //當confirmState為ture並且confirmModal存在時證明用戶點擊了刪除確認按鈕
    //當接口在請求過程中,removeLoading會變為ture,請求成功后removeLoading為false,所以當為false時可以將刪除彈窗銷毀,並將關於彈窗的兩個參數設置為初始狀態
    if(nextProps.removeLoading!==undefined&&!nextProps.removeLoading){
       nextState.confimModal.destroy(); 
      this.setState({
        confirmState:false, 
        confimModal:null 
      }) 
    }
  } 
  return true
 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM